Laravel 8 禁用翻译,响应字段名称和规则
Lavavel 8 disable translation, response with field name and rule
我有一个简单的问题,但我坚持了下来。我只需要为验证器禁用翻译。例如,让字段 name 具有规则 max:80。当验证失败时,我想回复 json:
{
"errors": {
"name": {
"max": 80
},
},
"status": "error"
}
有什么办法可以实现吗?我制作了自己的 Translator(扩展了 \Illuminate\Translation\Translator),我发现我可以检查翻译是否来自 validation.php 文件,并将值替换为翻译的键。但是这个解决方案看起来非常难看。
编辑:
我决定离开翻译。问题在于验证,而不是翻译。所以我做了 CustomValidator class
namespace App\Overrides;
use Illuminate\Validation\Validator;
class CustomValidator extends Validator
{
/**
* Determine if the data passes the validation rules.
*
* @return bool
*/
public function passes(): bool
{
return parent::passes();
}
}
及其工厂:
namespace App\Overrides;
use Illuminate\Validation\Factory;
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 App\Providers;
use App\Overrides\ValidatorFactory;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->app->extend('validator', function () {
return $this->app->get(ValidatorFactory::class);
});
}
但是又出现了新的问题。验证规则使用数据库(如“唯一”)抛出错误:存在验证器尚未设置。其他规则没有。
$validator->failed();
就是答案。
它包含所有失败的规则:
array:2 [
"name" => array:1 [
"Max" => array:1 [
0 => "80"
]
]
"password" => array:1 [
"Regex" => array:1 [
0 => "/[a-z]/"
]
]
]
我有一个简单的问题,但我坚持了下来。我只需要为验证器禁用翻译。例如,让字段 name 具有规则 max:80。当验证失败时,我想回复 json:
{
"errors": {
"name": {
"max": 80
},
},
"status": "error"
}
有什么办法可以实现吗?我制作了自己的 Translator(扩展了 \Illuminate\Translation\Translator),我发现我可以检查翻译是否来自 validation.php 文件,并将值替换为翻译的键。但是这个解决方案看起来非常难看。
编辑: 我决定离开翻译。问题在于验证,而不是翻译。所以我做了 CustomValidator class
namespace App\Overrides;
use Illuminate\Validation\Validator;
class CustomValidator extends Validator
{
/**
* Determine if the data passes the validation rules.
*
* @return bool
*/
public function passes(): bool
{
return parent::passes();
}
}
及其工厂:
namespace App\Overrides;
use Illuminate\Validation\Factory;
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 App\Providers;
use App\Overrides\ValidatorFactory;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->app->extend('validator', function () {
return $this->app->get(ValidatorFactory::class);
});
}
但是又出现了新的问题。验证规则使用数据库(如“唯一”)抛出错误:存在验证器尚未设置。其他规则没有。
$validator->failed();
就是答案。
它包含所有失败的规则:
array:2 [
"name" => array:1 [
"Max" => array:1 [
0 => "80"
]
]
"password" => array:1 [
"Regex" => array:1 [
0 => "/[a-z]/"
]
]
]