Laravel 如何将自定义验证消息放入验证包?
Laravel How to put custom validation messsage to validation bag?
如何将外部验证器的错误消息放入消息包?
事情是:我从我的 API 收到验证器的错误响应,我收到错误消息,我想将其推送到我页面上的现有验证器。
所以,我有一个通过我页面上的 laravel 验证器和 API 验证器验证的表单。
我试过的是:
dd(ValidationException::withMessages([
'email' => $errors->email,
]));
其中 $errors->email
只是一条错误消息。但是,它的工作方式与在本地项目内部进行验证不同,验证消息未翻译等等...
我也试过了
throw ValidationException::withMessages([
$validator->errors()->add('email', $errors->email[0])
]);
接近解决方案的地方:
在 ValidationException
中,我有异常实例,但消息 属性 嵌套太多:
{
"validator": {
"messages": {
"0" => [
0 => MessageBag(2)
]
}
}
}
消息嵌套过多,仍然与本地消息不一样。
如果我不够清楚,我可以提供进一步的解释。
编辑:
要从 API 中获取错误,我使用:
$errors = $response->getErrors()->email;
这给了我:
array:1 [▼
0 => {#784 ▼
+"code": 42252
+"message": "The email has already been taken."
}
]
所以我不能使用$response->getErrors()->email->first()
首先尝试设置错误:
ValidationException::withMessages([
"email" => $errors->email->first()
]);
不过,我更感兴趣的是您选择如何显示错误。
记住,不要使用 Laravel 中的键访问器来访问集合中的对象,也不要将它们转换为数组。 Eloquent 和 Collection 方法几乎可以通过外观继承在几乎所有集合对象上普遍使用,并且非常有用。
https://laravel.com/docs/5.6/validation#customizing-the-error-messages
编辑:另外,也许搜索并重新阅读此页面上的 "Named Error Bags" 部分和 "Custom Error Messages" 部分。如果我的方法不能让您更接近,他们可能会为您提供找到解决方案的触发器。
最好使用表单请求验证
例如:
class UpdateName extends BaseRequest {
public function rules()
{
return [
'name' => 'required',
];
}
public function messages()
{
return [
'name.required' => 'Your name is required or any custom msg',
];
}
}
尝试使用 $ php artisan make:request MyNewRequestName
创建您自己的请求验证器
class MyNewRequestName extends BaseRequest {
public function rules()
{
return [
'input_field' => 'required|integer',
];
}
public function messages()
{
return [
'input_field.required' => 'This field is required',
'input_field.integer' => 'This field must contain integers only',
];
}
}
然后,在您的控制器中:
public function update( MyNewRequestName $request )
{
//... another code here
}
这样使用。
throw \Illuminate\Validation\ValidationException::withMessages([
'email' => 'Your validation message'
]);
如何将外部验证器的错误消息放入消息包? 事情是:我从我的 API 收到验证器的错误响应,我收到错误消息,我想将其推送到我页面上的现有验证器。
所以,我有一个通过我页面上的 laravel 验证器和 API 验证器验证的表单。
我试过的是:
dd(ValidationException::withMessages([
'email' => $errors->email,
]));
其中 $errors->email
只是一条错误消息。但是,它的工作方式与在本地项目内部进行验证不同,验证消息未翻译等等...
我也试过了
throw ValidationException::withMessages([
$validator->errors()->add('email', $errors->email[0])
]);
接近解决方案的地方:
在 ValidationException
中,我有异常实例,但消息 属性 嵌套太多:
{
"validator": {
"messages": {
"0" => [
0 => MessageBag(2)
]
}
}
}
消息嵌套过多,仍然与本地消息不一样。
如果我不够清楚,我可以提供进一步的解释。
编辑:
要从 API 中获取错误,我使用:
$errors = $response->getErrors()->email;
这给了我:
array:1 [▼
0 => {#784 ▼
+"code": 42252
+"message": "The email has already been taken."
}
]
所以我不能使用$response->getErrors()->email->first()
首先尝试设置错误:
ValidationException::withMessages([
"email" => $errors->email->first()
]);
不过,我更感兴趣的是您选择如何显示错误。
记住,不要使用 Laravel 中的键访问器来访问集合中的对象,也不要将它们转换为数组。 Eloquent 和 Collection 方法几乎可以通过外观继承在几乎所有集合对象上普遍使用,并且非常有用。
https://laravel.com/docs/5.6/validation#customizing-the-error-messages
编辑:另外,也许搜索并重新阅读此页面上的 "Named Error Bags" 部分和 "Custom Error Messages" 部分。如果我的方法不能让您更接近,他们可能会为您提供找到解决方案的触发器。
最好使用表单请求验证
例如:
class UpdateName extends BaseRequest {
public function rules()
{
return [
'name' => 'required',
];
}
public function messages()
{
return [
'name.required' => 'Your name is required or any custom msg',
];
}
}
尝试使用 $ php artisan make:request MyNewRequestName
class MyNewRequestName extends BaseRequest {
public function rules()
{
return [
'input_field' => 'required|integer',
];
}
public function messages()
{
return [
'input_field.required' => 'This field is required',
'input_field.integer' => 'This field must contain integers only',
];
}
}
然后,在您的控制器中:
public function update( MyNewRequestName $request )
{
//... another code here
}
这样使用。
throw \Illuminate\Validation\ValidationException::withMessages([
'email' => 'Your validation message'
]);