Почему Laravel группирует методы RESTful так, как они это делают? - PullRequest
0 голосов
/ 15 февраля 2020

Я новичок в Laravel и прохожу курс Laravel 6 с нуля в Laracasts. Курс бесплатный, но я не могу позволить себе членство в Laracasts, поэтому не могу задавать вопросы там.

Я закончил первые несколько разделов курса и немного запутался в некоторых концепциях вокруг вся ОТЛИЧНАЯ идея. Инструктор, который, кажется, очень хорошо разбирается в Laravel, описывает 7 методов, которые станут частью практически любого приложения CRUD (Create Read Update Delete) (и большинство приложений по своей природе являются CRUD.) Он говорит, что называет их Это должно соответствовать 7 методам:

  1. index - список всех ресурсов в коллекции, например, все статьи в блоге
  2. show - отображать указанный c ресурс из коллекция, например, указанная c статья в блоге
  3. create - создать новый экземпляр ресурса, например, добавить новую статью в блог
  4. store - сохранить новый экземпляр ресурса в хранилище данных, например, в базу данных
  5. edit - изменить содержимое существующего ресурса, например, изменить заголовок статьи
  6. update - сохранить измененный ресурс в хранилище данных
  7. destroy - удалить ресурс из коллекции, например, удалить статью в блоге

Я немного озадачен этим разделением работы на 7 отдельных методов. Мне кажется, что Create и Store принадлежат вместе в одном методе; то же самое для редактирования и обновления. Создание новой записи состоит из двух этапов: отображение пустой формы для сбора данных, необходимых для создания новой статьи, затем проверка данных и их сохранение в базе данных. Аналогичным образом, изменение существующей записи состоит из двух этапов: отображение текущих данных в форме и предоставление пользователю возможности изменять то, что необходимо изменить, затем проверка их и отправка в базу данных (или обратно пользователю для исправлений).

Я бы также сказал, что в соответствии с подходом, который они использовали для создания / хранения и редактирования / обновления, уничтожение следует разделить на два метода: уничтожить и удалить, где уничтожение отображает полную запись о том, что Пользователь хочет удалить двумя кнопками внизу: Удалить и Отменить. Затем, если пользователь нажимает кнопку Удалить, они go обращаются к методу удаления, который фактически удаляет запись f из базы данных.

Я уже довольно давно кодирую и никогда не видел системы, в которой пользователю разрешалось бы удалять любую важную запись без предварительного показа записи и не спрашивали, уверены ли они в этом. удали это. Теперь, может быть, это вышло из моды, и я не заметил, но это кажется довольно благоразумным.

Так почему же методы, какими они являются, по крайней мере, так как RESTful реализован в Laravel?

1 Ответ

2 голосов
/ 15 февраля 2020

Мне кажется, что Create и Store объединены в одном методе

Ну, Laravel генерирует все эти методы, думая в приложении на стороне сервера. Таким образом, в SSR, прежде чем хранить ваши данные, вы должны увидеть форму создания. Вот почему существует эта функция create(). create(), как правило, должен возвращать представление, которое покажет пользователю действительные поля для создания ресурса, все это делается в запросе GET. Затем, когда пользователи нажимают кнопку «создать» / «добавить», он достигает метода store(), который реализует logi c для сохранения этих данных, сохраняющих новую запись в вашей базе данных, это делается в POST request.

То же самое относится и к edit() / update().

Я довольно долго кодировал и никогда не видел системы, в которой пользователю было разрешено удалить любую важную запись без предварительного показа записи и опроса, если они уверены, что хотят удалить ее

Это потому, что эти проверки обычно реализуются на стороне клиента, Итак, вы делаете это с JS в вашем интерфейсе, для проверок такого рода вы не должны попадать на сервер.

Так почему же методы, какими они являются, по крайней мере, как RESTful? реализован в Laravel?

Наконец, для RESTful API вам не нужны все эти методы. Просто index, show, store, update и delete. Если вам просто необходимы такие методы в вашем контроллере, вы можете исключить create / edit, добавив флаг --api при создании вашего контроллера через Artisan. Из документации :

Маршруты ресурсов API

// ...

Для быстрой генерации контроллера ресурсов API, который не включает create или edit, используйте переключатель --api при выполнении команды make:controller:

php artisan make:controller API/PhotoController --api
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...