Сообщение об ошибках формируется в текущей локализации Laravel.
\config\app.php Текущая локлизация: 'locale' => 'en',
Адрес локализации: \resources\lang\en\validation.php
Например, для обязательного поля это: 'required' => 'The :attribute field is required.',
:attribute — это переменная, которая потом будет заменена на имя поля.
Можно добавлять пользовательские сообщения, не меняя стандартные.
В этой ячейки можно описать свои правила:
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
Напишем свои правила:
'custom' => [
'name' => [
'required' => 'Поле name обязательно к заполнению',
],
],
Идем в файл: \app\Http\Requests\ContactRequest.php
public function rules()
{
return [
'name' => 'required',
'email' => 'max:5|required' // не более 5 символов
];
}
Файл \resources\lang\en\validation.php
'custom' => [
'name' => [
'required' => 'Поле name обязательно к заполнению',
],
'email' => [
'max' => 'Максимально допустимое количество символов - :max',
'required' => 'E-mail обязателен'
]
],
Опишем пользовательские сообщения для правила required.
Если мы используем пользовательские сообщения, то сообщения локализации не используются фреймворком.
Идем в файл: \app\Http\Requests\ContactRequest.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',
];
}
Изменим контроллер в \app\Http\Controllers\Admin\ContactController.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" => []
]
]
пятница, 21 июля 2017 г.
LARAVEL. СООБЩЕНИЯ ОШИБОК ВАЛИДАЦИИ
Подписаться на:
Комментарии к сообщению (Atom)
Materialize-css. Футер
Сделаем футер и прижмем к низу страницы. Документация: https://materializecss.com/footer.html
-
Сделаем футер и прижмем к низу страницы. Документация: https://materializecss.com/footer.html
-
Простое API. HTTP. Урок 1. Справка о методе PUT.
-
Класс Request - абстракция отправляемого запроса пользователя.
Комментариев нет:
Отправить комментарий