Я прочитал документы на веб-сайте Laravel, Qaru и Google, но до сих пор не понимаю разницы между Route::resource
и Route::controller
.
Один из ответов сказал, что ресурс Route:: был для crud. Однако с помощью Route:: controller мы можем выполнить то же самое, что и с ресурсом Route::, и мы можем указать только необходимые действия.
Они кажутся похожими на братьев и сестер:
Route::controller('post','PostController');
Route::resource('post','PostController');
Как мы можем выбрать, что использовать? Что такое хорошая практика?
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 в сочетании с явными маршрутами.
Для метода контроллера маршрута мы должны определить только один маршрут. В методе get или post мы должны определить маршрут отдельно.
И метод ресурсов используется для создания нескольких маршрутов для обработки множества действий Restful.
Здесь описано Laravel .