Laravel ошибки валидации на русском

Можно передавать сообщения прямо в 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 руб

Понравилась статья? Поделить с друзьями:
  • Laravel ошибка 422
  • Laravel ошибка 419 при отправке post запроса
  • Laravel ошибка 403
  • Laravel обработчик ошибок
  • Lc200 ошибка b1422