Использование специальных пользовательских атрибутов проверки запроса формы
Используя локализацию Ларавеля (http://laravel.com/docs/5.1/localization ) я создал некоторые пользовательские атрибуты проверки, чтобы обеспечить более дружественные ошибки проверки (например, " имя " вместо имени и т. д.).
Я использую запросы формы (http://laravel.com/docs/5.1/validation#form-request-validation ) для проверки пользовательских представлений и существуют сценарии, в которых я хотел бы предоставить пользовательские атрибуты проверки для конкретного хранилища (например, У меня может быть поле "имя", которое является названием бренда в одном контексте и названием продукта в другом).
Метод messages() позволяет мне указать правила проверки конкретных переопределений сообщений, но это не идеально, так как нам нужно переопределить не сообщение проверки как таковое, а только имя атрибута (например, если у нас есть 5 правил проверки для "электронной почты", мы должны предоставить здесь 5 переопределений, а не одно переопределение, скажем, для электронной почты клиента).Есть ли решение этой проблемы? Я отмечаю: ссылки на formatValidationErrors () и formatErrors () в документации Laravel, но на самом деле нет никакой информации о том, как правильно переопределить их, и мне не очень повезло в попытках.
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' ] }
Это переопределяет имя атрибута в контексте моего магазина.