Lavalvel 8禁用翻译,使用字段名称和规则进行响应



我只是有问题,但我卡住了。我只需要禁用验证器的翻译。例如,让字段name具有规则max:80。当验证失败时,我想用json:进行响应

{
"errors": {
"name": {
"max": 80
},
},
"status": "error"
}

有什么办法实现它吗?我制作了自己的翻译器(扩展了\Illuminate\Translation\Translator(,我发现我可以检查翻译是否来自validation.php文件,并用翻译的键替换该值。但这个解决方案看起来非常丑陋。

编辑:我决定留下翻译。问题在于验证,而不是翻译。所以我制作了CustomValidator

namespace AppOverrides;
use IlluminateValidationValidator;
class CustomValidator extends Validator
{
/**
* Determine if the data passes the validation rules.
*
* @return bool
*/
public function passes(): bool
{
return parent::passes();
}
}

和工厂:

namespace AppOverrides;
use IlluminateValidationFactory;
class ValidatorFactory extends Factory
{
protected function resolve(array $data, array $rules, array $messages, array $customAttributes )
{
if (is_null($this->resolver)) {
return new CustomValidator($this->translator, $data, $rules, $messages, $customAttributes);
}
return call_user_func($this->resolver, $this->translator, $data, $rules, $messages, $customAttributes);
}
}

然后我换了工厂的

namespace AppProviders;
use AppOverridesValidatorFactory;
use IlluminateSupportFacadesSchema;
use IlluminateSupportServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->app->extend('validator', function () {
return $this->app->get(ValidatorFactory::class);
});
}

但现在出现了一个新问题。验证的规则使用的数据库(如"唯一"(抛出ecxeption:存在验证程序尚未设置。其他规则则不然。

$validator->failed();就是答案。

它包含所有失败的规则:

array:2 [
"name" => array:1 [
"Max" => array:1 [
0 => "80"
]
]
"password" => array:1 [
"Regex" => array:1 [
0 => "/[a-z]/"
]
]
]

相关内容

  • 没有找到相关文章

最新更新