Создание формы и валидация

Создание формы

Формы создаются обычным HTML, только внутри формы добавляется параметр {{ csrf_field() }}, которая нужна для безопасной обработки формы. Без него форма работать не будет.

<form method="POST">
    @csrf              <!-- с версии Laravel 5.6 -->
    {{ csrf_field() }} <!-- до версии Laravel 5.5 -->
    <!-- поля формы -->
</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-запроса возвращалась бы ошибка.

Валидация формы

Сначала в шаблоне надо указать, где выводить ошибки валидации формы.

<!-- Вывод ошибок валидации формы -->

@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 означает, что поле может быть пустым. Если бы она не была указана, то показывалось бы сообщение «неправильный формат даты».

Различные способы валидации указаны на странице Способы валидации.

Вывод сообщений с ошибками на русском языке

Текст сообщений с ошибками хранится в файле resources/lang/ru/validation.php.

# resources/lang/ru/validation.php

return [
    'required' => 'Поле «:attribute» обязательно для заполнения',
    // …
];

Язык текущего сайта указывается в файле config/app.php.

# config/app.php

return [
    'locale' => 'ru',
    // …
];