Использование специальных пользовательских атрибутов проверки запроса формы


Используя локализацию Ларавеля (http://laravel.com/docs/5.1/localization ) я создал некоторые пользовательские атрибуты проверки, чтобы обеспечить более дружественные ошибки проверки (например, " имя " вместо имени и т. д.).

Я использую запросы формы (http://laravel.com/docs/5.1/validation#form-request-validation ) для проверки пользовательских представлений и существуют сценарии, в которых я хотел бы предоставить пользовательские атрибуты проверки для конкретного хранилища (например, У меня может быть поле "имя", которое является названием бренда в одном контексте и названием продукта в другом).

Метод messages() позволяет мне указать правила проверки конкретных переопределений сообщений, но это не идеально, так как нам нужно переопределить не сообщение проверки как таковое, а только имя атрибута (например, если у нас есть 5 правил проверки для "электронной почты", мы должны предоставить здесь 5 переопределений, а не одно переопределение, скажем, для электронной почты клиента).

Есть ли решение этой проблемы? Я отмечаю: ссылки на formatValidationErrors () и formatErrors () в документации Laravel, но на самом деле нет никакой информации о том, как правильно переопределить их, и мне не очень повезло в попытках.

2 4

2 ответа:

Вы можете переопределить имена атрибутов, что по умолчанию соответствует любому имени Поля.

С запросом формы

В вашем классе запроса формы переопределите метод 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'
     ]
}

Это переопределяет имя атрибута в контексте моего магазина.