Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Формы и валидация

Данным от пользователя нельзя доверять: поле может быть пустым, слишком длинным или содержать не то, что ожидалось. В Laravel правила проверки описывают одним массивом, а ошибки фреймворк показывает сам.

Форма

В каждой форме с методом POST должна быть директива @csrf — она добавляет скрытое поле с защитным токеном:

<form method="POST" action="/posts">
    @csrf
    <input type="text" name="title">
    <textarea name="body"></textarea>
    <button type="submit">Сохранить</button>
</form>

Проверка данных

Метод validate() принимает правила и возвращает только проверенные поля:

public function store(Request $request)
{
    $data = $request->validate([
        'title' => 'required|max:255',
        'body' => 'required',
    ]);
 
    Post::create($data);
 
    return redirect('/posts');
}

Если данные не прошли проверку, Laravel сам вернёт пользователя на форму — код ниже validate() не выполнится.

Частые правила

ПравилоЧто проверяет
requiredПоле заполнено
emailПравильный адрес почты
min:8 / max:255Длина строки или величина числа
integerЦелое число
unique:users,emailЗначения ещё нет в таблице users
confirmedСовпадает с полем ..._confirmation

Несколько правил разделяют вертикальной чертой или передают массивом.

Вывод ошибок

Директива @error показывает сообщение для конкретного поля:

<input type="text" name="title">
@error('title')
    <p class="error">{{ $message }}</p>
@enderror

Сохранение введённого

Чтобы после ошибки поля не очищались, прежнее значение подставляют функцией old():

<input type="text" name="title" value="{{ old('title') }}">

Сообщение об успехе

После сохранения пользователя перенаправляют и передают разовое сообщение:

return redirect('/posts')->with('status', 'Статья сохранена');
@if (session('status'))
    <p>{{ session('status') }}</p>
@endif

Сообщение живёт до следующего запроса и исчезает после обновления страницы.

Частая ошибка

Если в форме нет @csrf, при отправке Laravel вернёт ошибку 419 «Page Expired». Токен защищает от подделки запросов с чужих сайтов, поэтому отключать проверку не нужно — просто добавьте директиву в форму.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.