Laravel - Маршрут :: ресурс против Маршрута :: контроллер

67

Я прочитал документы на веб-сайте Laravel, Qaru и Google, но до сих пор не понимаю разницы между Route::resource и Route::controller.

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

Они кажутся похожими на братьев и сестер:

Route::controller('post','PostController');
Route::resource('post','PostController');

Как мы можем выбрать, что использовать? Что такое хорошая практика?

  • 11
    Просто примечание для пользователей Laravel 5.2, между тем неявные контроллеры устарели.
Теги:
laravel-4

2 ответа

129
Лучший ответ

Контроллер ресурсов RESTful

A Контроллер ресурсов RESTful устанавливает для вас некоторые маршруты по умолчанию и даже называет их.

Route::resource('users', 'UsersController');

Дает вам эти именованные маршруты:

Verb    Path                        Action  Route Name
GET     /users                      index   users.index
GET     /users/create               create  users.create
POST    /users                      store   users.store
GET     /users/{user}               show    users.show
GET     /users/{user}/edit          edit    users.edit
PUT     /users/{user}               update  users.update
DELETE  /users/{user}               destroy users.destroy

И вы должны настроить ваш контроллер как-то так (actions = methods)

class UsersController extends BaseController {

    public function index() {}

    public function show($id) {}

    public function store() {}

}

Вы также можете выбрать, какие действия включены или исключены следующим образом:

Route::resource('users', 'UsersController', [
    'only' => ['index', 'show']
]);

Route::resource('monkeys', 'MonkeysController', [
    'except' => ['edit', 'create']
]);

Документация RESTful Resource Controller


Неявный контроллер

Неявный контроллер более гибкий. Вы перенаправляетесь к вашим методам контроллера на основе типа и имени HTTP-запроса. Тем не менее, у вас нет названий маршрутов, определенных для вас, и он поймает все подпапки для одного и того же маршрута.

Route::controller('users', 'UserController');

Предложите вам настроить контроллер с помощью схемы именования RESTful:

class UserController extends BaseController {

    public function getIndex()
    {
        // GET request to index
    }

    public function getShow($id)
    {
        // get request to 'users/show/{id}'
    }

    public function postStore()
    {
        // POST request to 'users/store'
    }

}

Документация неявного контроллера


Хорошая практика - использовать то, что вам нужно, в соответствии с вашими предпочтениями. Мне лично не нравятся Неявные контроллеры, потому что они могут быть беспорядочными, не предоставлять имена и могут сбивать с толку при использовании php artisan routes. Обычно я использую RESTful Resource controllers в сочетании с явными маршрутами.

  • 1
    Если мы используем несколько маршрутов ресурсов (может быть, индексировать, показать), почему бы не использовать статические маршруты Route :: get (...)? Я думаю, что это не лучше, чем худшее, чем использовать массив ('only' => array ('index', 'show'). И какой метод используется для контроллера RESTFull, когда мы запрашиваем что-то вроде 'user / 123', getIndex () работает для 'user /', но с user / 123 я получаю ошибку NotFoundHttpException (пробовал разные имена getView и другие, работает только при объявлении как Controller @ getView)?
  • 0
    Может кто-нибудь уточнить, для чего предназначен ресурс.edit? Это метод GET, поэтому я предполагаю, что он должен содержать полную информацию о ресурсе, а не только ограниченную информацию через resource.show?
Показать ещё 8 комментариев
0

Для метода контроллера маршрута мы должны определить только один маршрут. В методе get или post мы должны определить маршрут отдельно.

И метод ресурсов используется для создания нескольких маршрутов для обработки множества действий Restful.

Здесь описано Laravel .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню