使用表单请求特定的自定义验证属性
Using form request specific custom validation attributes
使用 Laravel 的本地化 (http://laravel.com/docs/5.1/localization) 我创建了一些自定义验证属性以提供更友好的验证错误(例如,'First Name' 而不是名字等)。
我正在使用表单请求 (http://laravel.com/docs/5.1/validation#form-request-validation) 来验证用户提交,并且在某些情况下我想提供特定于商店的自定义验证属性(例如,我可能有一个 'name' 字段在一种情况下是品牌名称,在另一种情况下是产品名称)。
messages() 方法允许我指定验证规则特定的消息覆盖,但这并不理想,因为它不是我们需要覆盖的验证消息,只是属性名称(例如,如果我们有'email' 的 5 条验证规则,我们必须在此处提供 5 条覆盖,而不是针对客户电子邮件的 1 条覆盖。
有解决办法吗?我在 Laravel 文档中注意到了对 formatValidationErrors() 和 formatErrors() 的引用,但实际上并没有任何关于如何正确覆盖它们的信息,而且我在尝试时运气不佳。
您可以覆盖属性名称,默认为任何字段名称。
有表单请求
在您的表单请求中 class 覆盖 attributes()
方法:
public function attributes()
{
return [
'this_is_my_field' => 'Custom Field'
];
}
使用控制器或自定义验证
您可以使用第 4 个参数覆盖字段名称:
$this->validate($request, $rules, $messages, $customAttributes);
或
Validator::make($data, $rules, $messages, $customAttributes);
简单的工作示例
Route::get('/', function () {
// The data to validate
$data = [
'this_is_my_field' => null
];
// Rules for the validator
$rules = [
'this_is_my_field' => 'required',
];
// Custom error messages
$messages = [
'required' => 'The message for :attribute is overwritten'
];
// Custom field names
$customAttributes = [
'this_is_my_field' => 'Custom Field'
];
$validator = Validator::make($data, $rules, $messages, $customAttributes);
if ($validator->fails()) {
dd($validator->messages());
}
dd('Validation passed!');
});
如我的问题所述,我一直在寻找一种方法来为特定的表单请求存储 (http://laravel.com/docs/5.1/validation#form-request-validation) 提供自定义属性名称。
Laravel 文档仅介绍了此上下文中请求的两种方法 - rules() 和 authorize()。我知道有一个 messages() 方法可以提供特定于验证的自定义错误消息,但似乎还有一个 attributes() 方法,它完全符合我的要求:
public function attributes()
{
return [
'name' => 'Product Name'
]
}
这将覆盖我商店上下文中的属性名称。
使用 Laravel 的本地化 (http://laravel.com/docs/5.1/localization) 我创建了一些自定义验证属性以提供更友好的验证错误(例如,'First Name' 而不是名字等)。
我正在使用表单请求 (http://laravel.com/docs/5.1/validation#form-request-validation) 来验证用户提交,并且在某些情况下我想提供特定于商店的自定义验证属性(例如,我可能有一个 'name' 字段在一种情况下是品牌名称,在另一种情况下是产品名称)。
messages() 方法允许我指定验证规则特定的消息覆盖,但这并不理想,因为它不是我们需要覆盖的验证消息,只是属性名称(例如,如果我们有'email' 的 5 条验证规则,我们必须在此处提供 5 条覆盖,而不是针对客户电子邮件的 1 条覆盖。
有解决办法吗?我在 Laravel 文档中注意到了对 formatValidationErrors() 和 formatErrors() 的引用,但实际上并没有任何关于如何正确覆盖它们的信息,而且我在尝试时运气不佳。
您可以覆盖属性名称,默认为任何字段名称。
有表单请求
在您的表单请求中 class 覆盖 attributes()
方法:
public function attributes()
{
return [
'this_is_my_field' => 'Custom Field'
];
}
使用控制器或自定义验证
您可以使用第 4 个参数覆盖字段名称:
$this->validate($request, $rules, $messages, $customAttributes);
或
Validator::make($data, $rules, $messages, $customAttributes);
简单的工作示例
Route::get('/', function () {
// The data to validate
$data = [
'this_is_my_field' => null
];
// Rules for the validator
$rules = [
'this_is_my_field' => 'required',
];
// Custom error messages
$messages = [
'required' => 'The message for :attribute is overwritten'
];
// Custom field names
$customAttributes = [
'this_is_my_field' => 'Custom Field'
];
$validator = Validator::make($data, $rules, $messages, $customAttributes);
if ($validator->fails()) {
dd($validator->messages());
}
dd('Validation passed!');
});
如我的问题所述,我一直在寻找一种方法来为特定的表单请求存储 (http://laravel.com/docs/5.1/validation#form-request-validation) 提供自定义属性名称。
Laravel 文档仅介绍了此上下文中请求的两种方法 - rules() 和 authorize()。我知道有一个 messages() 方法可以提供特定于验证的自定义错误消息,但似乎还有一个 attributes() 方法,它完全符合我的要求:
public function attributes()
{
return [
'name' => 'Product Name'
]
}
这将覆盖我商店上下文中的属性名称。