Создание формы и валидация
Создание формы
Формы создаются обычным HTML, только внутри формы добавляется параметр @csrf
, которая нужна для безопасной обработки формы (если точнее, чтобы нельзя было передавать данные с другого сайта). Без него форма работать не будет.
<form method="POST"> @csrf <!-- поля формы --> </form>
В файле routes/web.php должна быть создана страница для обработки POST-запросов.
# routes/web.php Route::get('news/edit/{id}', 'NewsController@edit'); Route::post('news/edit/{id}', 'NewsController@edit');
Если бы Route::post()
не было, то при отправки POST-запроса возвращалась бы ошибка.
За автоматическую проверку CSRF отвечается middleware \App\
.
Валидация формы
Сначала в шаблоне надо указать, где выводить ошибки валидации формы.
<!-- Вывод ошибок валидации формы --> @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
Также для элементов форм в случае ошибок можно выводить класс .is-invalid
.
<input name="title" type="text" class="@error('title') is-invalid @enderror">
Сама валидация происходит через метод $request->validate()
.
# app/Http/Controllers/NewsController.php public function edit(Request $request) { // выполнять код, если есть POST-запрос if ($request->isMethod('post')) { // валидация формы $request->validate([ 'title' => 'required|max:255', 'body' => 'required', 'expire' => 'nullable|date', ]); } }
На примере выше показано, что поле «title» является обязательным для заполнения, и если она не будет заполнена, то Laravel сделает редирект на предыдущую страницу и выведет ошибки.
Значение nullable
означает, что поле может быть пустым. Если бы она не была указана, то показывалось бы сообщение «неправильный формат даты».
Также в форме могут передаваться массивы.
<input type="text" name="user[0][id]"> <input type="text" name="user[0][name]"> <input type="text" name="user[1][id]"> <input type="text" name="user[1][name]">
Задать валидацию массивов можно через код ниже:
$request->validate([ 'user.*.id' => 'required', ]);
Различные способы валидации указаны на странице Способы валидации.
Вывод сообщений с ошибками на русском языке
Текст сообщений с ошибками хранится в файле resources/lang/ru/validation.php.
# resources/lang/ru/validation.php return [ 'required' => 'Поле «:attribute» обязательно для заполнения', // … ];
Также можно указать текст ошибки для конкретного элемента формы через массив custom
.
# resources/lang/ru/validation.php // Сообщения валидации для $_POST['title'] return [ // … 'custom' => [ 'title' => [ 'required' => 'Не заполнено имя статьи', 'max' => 'Превышено число символов для имени статьи', ], ], ];
Язык текущего сайта указывается в файле config/app.php.
# config/app.php return [ 'locale' => 'ru', // … ];
Поддержать автора