Подтвердить что ты не робот

Laravel - Route:: resource vs Route:: controller

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

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

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

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

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

4b9b3361

Ответ 1

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

Контроллер ресурсов 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|PATCH     /users/{user}               update  users.update
DELETE        /users/{user}               destroy users.destroy

И вы бы настроили свой контроллер примерно так (actions = method)

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 в сочетании с явными маршрутами.

Ответ 2

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

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

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