使用表单请求特定的自定义验证属性

Bry*_*ynJ 5 laravel laravel-5 laravel-validation

使用Laravel的本地化(http://laravel.com/docs/5.1/localization)我创建了一些自定义验证属性以提供更友好的验证错误(例如,'First Name'而不是名字等).

我正在使用表单请求(http://laravel.com/docs/5.1/validation#form-request-validation)以验证用户提交,并且在某些情况下我想提供特定于商店的自定义验证属性(对于例如,我可能有一个'name'字段,在一个上下文中是Brand Name,在另一个上下文中是Product Name.

messages()方法允许我指定特定于验证规则的消息覆盖,但这并不理想,因为它不是验证消息,因此我们需要覆盖,只需要覆盖属性名称(例如,如果我们有5个验证规则'电子邮件',我们必须在这里提供5个覆盖,而不是一个覆盖,比如说,客户电子邮件).

这个问题有方法解决吗?我注意到Laravel文档中对formatValidationErrors()和formatErrors()的引用,但实际上并没有关于如何正确覆盖这些内容的任何信息,而且我没有太多运气.

use*_*930 8

您可以覆盖属性名称,这些名称默认为字段名称.

有表格要求

在您的表单请求类中重写attributes()方法:

public function attributes()
{
    return [
        'this_is_my_field' => 'Custom Field'
    ];
}
Run Code Online (Sandbox Code Playgroud)

使用控制器或自定义验证

您可以使用第4个参数覆盖字段名称:

$this->validate($request, $rules, $messages, $customAttributes);
Run Code Online (Sandbox Code Playgroud)

要么

Validator::make($data, $rules, $messages, $customAttributes);
Run Code Online (Sandbox Code Playgroud)

简单的工作示例

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!');
});
Run Code Online (Sandbox Code Playgroud)