PHP: Laravel
2026-02-26 18:17 Diff

Обновление очень похоже на создание, с той лишь разницей, что мы не создаем сущность с нуля, а извлекаем ее из базы. Остальное практически без изменений.

За скобками остается важный вопрос: права на изменение. Изменять что-то на сайте, обычно, может только автор, тот кто создал сущность. Механизм, который отвечает за выдачу и проверку прав, называется авторизацией (не путать с аутентификацией). В Laravel авторизация встроена. Она не рассматривается в курсе, но про нее можно прочитать самостоятельно в документации.

Форма

Маршрут

Обработчик

Шаблон

Шаблон редактирования практически один в один повторяет шаблон создания. Разными у них бывают только отдельные элементы, например, текст кнопки отправки формы. Для таких случаев используют директиву @include($pathToTemplate), которая позволяет извлекать общие куски шаблонов в отдельные шаблоны и включать их там где нужно.

Создайте в директории resources/views/article шаблон form.blade.php.

Теперь включите его в create.blade.php:

И практически то же самое надо добавить в edit.blade.php. Создайте этот файл и вставьте в него код:

Основных изменений здесь три:

  • Другое имя кнопки
  • Метод отправки PATCH, так как происходит обновление
  • Адрес формы указывает на конкретную статью

Обработчик формы

Маршрут

Обработчик

Обработчик, обновляющий сущность практически идентичен созданию сущности. Разница кроется в нескольких деталях. Во-первых, мы работаем с существующей статьей, поэтому ее нужно извлечь из базы данных. Во-вторых, валидация на уникальность должна учитывать текущую статью при проверке. Иначе валидатор будет ругаться, что такое имя уже есть в базе данных.

Можно заметить, что валидации повторяются практически один в один. Так происходит в подавляющем большинстве случаев. Те правила, которые применяются к сущности при создании, должны применяться к ней и во время редактирования. При текущем подходе возникает дублирование, которого хотелось бы избежать. Это можно сделать с помощью Form Request.

В остальном все то же самое: объект заполняется значениями из формы, далее сохранение и редирект на список статей.