Можно передавать сообщения прямо в Validator
$messages = array(
'required' => 'Поле :attribute должно быть заполнено.',
);
$validator = Validator::make($input, $rules, $messages);
строка :attribute будет заменена на имя проверяемого поля
Так же можно добавлять сообщения в файл локализации, например:app/lang/xx/validation.php
'custom' => array(
'email' => array(
'required' => 'Нам нужно знать ваш e-mail адрес!',
),
),
Изменение сообщений об ошибках
При необходимости вы можете задать свои сообщения об ошибках проверки ввода вместо изначальных. Для этого есть несколько способов. Во-первых, вы можете передать свои сообщения третьим аргументом метода Validator::make():
$messages = [
'required' => 'Необходимо указать :attribute.',
];
$validator = Validator::make($input, $rules, $messages);
В этом примере обозначение :attribute будет заменено именем проверяемого поля. Вы можете использовать и другие обозначения. Например:
$messages = [
'same' => ':attribute и :other должны совпадать.',
'size' => ':attribute должен быть равен :size.',
'between' => ':attribute должен быть между :min и :max.',
'in' => ':attribute должен иметь один из следующих типов: :values',
];
Указание своего сообщения для конкретного атрибута
Иногда вам может понадобиться указать своё сообщения только для конкретного поля. Вы можете сделать это с помощью «точечной» записи. Сначала укажите имя атрибута, а затем правило:
$messages = [
'email.required' => 'Нам надо знать ваш e-mail!',
];
Указание своих сообщений в языковых файлах
В большинстве случаев вы будете указывать свои сообщения в языковом файле, а не передавать их напрямую в Validator. Для этого добавьте свои сообщения в массив custom в языковом файле resources/lang/xx/validation.php:
PHP
'custom' => [
'email' => [
'required' => 'Нам надо знать ваш e-mail!',
],
],
Ссылка на доку https://laravel.com/docs/7.x/validation#introduction
Сообщения ошибок валидации Laravel из коробки вываливаются на английском языке. Чтобы сообщения были на русском языке, нужно сделать пару шагов.
1. В файле конфигурации config/app.php ставим ‘locale’ => ‘ru’, указывая тем самым, что наше приложение имеет русский язык.
2. В папке resources/lang создаем папку ru и в нее закачиваем файл validation.php, который берем вот отсюда https://github.com/caouecs/Laravel-lang/tree/master/src/ru.
Теперь сообщения будут появляться на русском языке.
Свои аттрибуты можно добавлять в блок, который находится в конце файла.
'attributes' => [ 'name' => 'Имя', 'username' => 'Никнейм', 'email' => 'E-Mail адрес', 'first_name' => 'Имя', 'last_name' => 'Фамилия', 'password' => 'Пароль', 'password_confirmation' => 'Подтверждение пароля', 'city' => 'Город', 'country' => 'Страна', 'address' => 'Адрес', 'phone' => 'Телефон', 'mobile' => 'Моб. номер', 'age' => 'Возраст', 'sex' => 'Пол', 'gender' => 'Пол', 'day' => 'День', 'month' => 'Месяц', 'year' => 'Год', 'hour' => 'Час', 'minute' => 'Минута', 'second' => 'Секунда', 'title' => 'Наименование', 'content' => 'Контент', 'description' => 'Описание', 'excerpt' => 'Выдержка', 'date' => 'Дата', 'time' => 'Время', 'available' => 'Доступно', 'size' => 'Размер', ],
Метки: Валидация
Вам понравиться
Сообщение об ошибках формируется в текущей локализации Laravel. configapp.php Текущая локлизация: 'locale' => 'en', Адрес локализации: resourceslangenvalidation.php Например, для обязательного поля это: 'required' => 'The :attribute field is required.', :attribute — это переменная, которая потом будет заменена на имя поля. Можно добавлять пользовательские сообщения, не меняя стандартные. В этой ячейки можно описать свои правила: 'custom' => [ 'attribute-name' => [ 'rule-name' => 'custom-message', ], ], Напишем свои правила: 'custom' => [ 'name' => [ 'required' => 'Поле name обязательно к заполнению', ], ], Идем в файл: appHttpRequestsContactRequest.php public function rules() { return [ 'name' => 'required', 'email' => 'max:5|required' // не более 5 символов ]; } Файл resourceslangenvalidation.php 'custom' => [ 'name' => [ 'required' => 'Поле name обязательно к заполнению', ], 'email' => [ 'max' => 'Максимально допустимое количество символов - :max', 'required' => 'E-mail обязателен' ] ], Опишем пользовательские сообщения для правила required. Если мы используем пользовательские сообщения, то сообщения локализации не используются фреймворком. Идем в файл: appHttpRequestsContactRequest.php public function messages() { return [ 'required' => 'Данное поле :attribute обязательно к заполнению', ]; } Если данное сообщение необходимо только для поля name: public function messages() { return [ 'name.required' => 'Данное поле :attribute обязательно к заполнению', ]; } или так: public function messages() { return [ 'name.required' => 'Данное поле :attribute обязательно к заполнению', 'email.max' => 'Максимально допустимое количество символов - :max', ]; } Изменим контроллер в appHttpControllersAdminContactController.php public function store(Request $request, $id=FALSE) { // Если запрос - метод post, то валидируем данные: if($request->isMethod('post')) { $messages = [ 'name.required' => 'Данное поле :attribute обязательно к заполнению', 'email.max' => 'Максимально допустимое количество символов - :max', ]; $validator = Validator::make($request->all(), [ 'name' => 'required' ], $messages); // Если валидация была завершена с ошибками if($validator->fails()) { return redirect()->route('contact')->withErrors($validator)->withInput(); // ошибки будут сохранены в сессию } } return view('default.contact', ['title'=>'Contacts']); } Если не заполнить поле name, то выведется ошибка. Распечатаем объект ошибок: public function store(Request $request, $id=FALSE) { // Если запрос - метод post, то валидируем данные: if($request->isMethod('post')) { $messages = [ 'name.required' => 'Данное поле :attribute обязательно к заполнению', 'email.max' => 'Максимально допустимое количество символов - :max', ]; $validator = Validator::make($request->all(), [ 'name' => 'required' ], $messages); // Если валидация была завершена с ошибками if($validator->fails()) { $messages = $validator->errors(); dump($messages); // return redirect()->route('contact')->withErrors($validator)->withInput(); // ошибки будут сохранены в сессию } } return view('default.contact', ['title'=>'Contacts']); } Выводит: MessageBag {#200 ▼ #messages: array:1 [▼ "name" => array:1 [▼ 0 => "Данное поле name обязательно к заполнению" ] ] #format: ":message" } Если мы напишем: $messages = $validator->errors(); dump($messages->all()); То у нас выведется массив ошибок: array:1 [▼ 0 => "Данное поле name обязательно к заполнению" ] Или dump($messages->first('name')); Выводит: Данное поле name обязательно к заполнению Если нам нужны все сообщения об ошибках, то используем метод get(). dump($messages->get('name')); // в кавычках используем имя интересующего поля Метод has() проверяет есть ли для конкретного поля сообщения об ошибках. if($validator->fails()) { $messages = $validator->errors(); // если для поля name есть сообщения об ошибках, то отобразим их на экране if ($messages->has('name')) { dump($messages->get('name')); } } Можно обернуть сообщения в теге так: if($validator->fails()) { $messages = $validator->errors(); // если для поля name есть сообщения об ошибках, то отобразим их на экране if ($messages->has('name')) { dump($messages->all('<p> :message </p>')); // метка :message будет заменена сообщением об ошибке } } Выводит: array:2 [▼ 0 => "<p> Данное поле name обязательно к заполнению </p>" 1 => "<p> E-mail обязателен </p>" ] Или для одного поля: dump($messages->first('name', '<p> :message </p>')); Иногда нужно выполнить какое-то действие сразу после создания валидатора. Метод after() позволяет описать функцию, которая выполнится сразу после создания валидатора. if($request->isMethod('post')) { $messages = [ 'name.required' => 'Данное поле :attribute обязательно к заполнению', 'email.max' => 'Максимально допустимое количество символов - :max', ]; $validator = Validator::make($request->all(), [ 'name' => 'required', 'email' => 'required' ], $messages); $validator->after(function($validator) { $validator->errors()->add('name', 'Дополнительное сообщение'); }); // Если валидация была завершена с ошибками if($validator->fails()) { $messages = $validator->errors(); return redirect()->route('contact')->withErrors($validator)->withInput(); // ошибки будут сохранены в сессию } } Выводятся ошибки: Данное поле name обязательно к заполнению Дополнительное сообщение E-mail обязателен Правило sometimes $validator = Validator::make($request->all(), [ 'name' => 'required', 'email' => 'sometimes|required' // поле обязательно к заполнению, если оно присутствует в объекте request ], Метод sometimes описывает правила, которые будут применены к полям, если функция-обработчик вернет истину. public function store(Request $request, $id=FALSE) { // Если запрос - метод post, то валидируем данные: if($request->isMethod('post')) { $messages = [ 'name.required' => 'Данное поле :attribute обязательно к заполнению', 'email.max' => 'Максимально допустимое количество символов - :max', ]; $validator = Validator::make($request->all(), [ 'name' => 'required', //'email' => 'required' // поле обязательно к заполнению, если оно присутствует ], $messages); // $input - объект входных данных // Если длина имени >= 10, то поле email обязательно к заполнению $validator->sometimes('email', 'required', function($input) { return strlen($input->name) >= 10; }); // Если валидация была завершена с ошибками if($validator->fails()) { $messages = $validator->errors(); return redirect()->route('contact')->withErrors($validator)->withInput(); // ошибки будут сохранены в сессию } } return view('default.contact', ['title'=>'Contacts']); } Метод failed() public function store(Request $request, $id=FALSE) { // Если запрос - метод post, то валидируем данные: if($request->isMethod('post')) { $messages = [ 'name.required' => 'Данное поле :attribute обязательно к заполнению', 'email.max' => 'Максимально допустимое количество символов - :max', ]; $validator = Validator::make($request->all(), [ 'name' => 'required', //'email' => 'required' // поле обязательно к заполнению, если оно присутствует ], $messages); // $input - объект входных данных // Если длина имени >= 10, то поле email обязательно к заполнению $validator->sometimes('email', 'required', function($input) { return strlen($input->name) >= 10; }); // $validator->after(function($validator) { // $validator->errors()->add('name', 'Дополнительное сообщение'); // }); // Если валидация была завершена с ошибками if($validator->fails()) { $messages = $validator->errors(); dump($validator->failed()); // массив с ошибками валидации данных exit(); return redirect()->route('contact')->withErrors($validator)->withInput(); // ошибки будут сохранены в сессию } } Выводит массив: array:1 [▼ "name" => array:1 [▼ "Required" => [] ] ]
В прошлых статьях был рассмотрен механизм валидации принимаемых данных. Рекомендуем посмотреть эти статьи:
- Проверка принимаемых данных в Laravel
- Проверка принимаемых данных в Laravel (часть 2)
В этой статье будет подробнее описан способ изменения сообщений, которые выдаются в процессе обработки ошибок.
Изменение сообщений об ошибках
Существует несколько способов для задания своих текстов сообщений об ошибках валидации. Первый — можно передать текст сообщения третьим аргументом для метода «make» класса «Validator»:
<?php
$messages = [
'required' => 'Необходимо заполнить поле :attribute.',
];
$validator = Validator::make($input, $rules, $messages);
?>
Обратите внимание на «:attribute» в тексте сообщения. Оно будет заменено на имя передаваемого поля. Приведём другие примеры автоматической подстановки таких значений:
<?php
$messages = [
'same' => ':attribute и :other должны совпадать.',
'size' => ':attribute должен быть равен :size.',
'between' => ':attribute должен быть между :min и :max.',
'in' => ':attribute должен иметь один из следующих типов: :values',
];
?>
Если нужно установить текст ошибки только для конкретного поля, а не для всех подобных ошибок во всех полях, то необходимо записать его через точку «имя_атрибута.правило»:
<?php
$messages = [
'email.required' => 'Нам надо знать ваш e-mail!',
];
?>
Сообщения на разных языках
Ситуация с передачей текста сообщения напрямую в «validator» встречается довольно редко. Обычно сообщения записываются в языковом файле resources/lang/xx/validation.php
. Там они записываются
<?php
'custom' => [
'email' => [
'required' => 'Пожалуйста, введите свой e-mail',
],
],
?>
Кроме того в этом файле файле можно указывать свои шаблоны для замены (как с «:attribute»):
<?php
'attributes' => [
'email' => 'адрес электронной почты',
],
?>
Была ли эта статья полезна?
Есть вопрос?
Закажите недорогой хостинг
Заказать
всего от 290 руб