Problem
I read the documentation on the Laravel website, Stack Overflow, and Google however I am not sure that I understand the difference between Route::resource
and Route::controller
.
One answer I found said Route::resource
was for CRUD. However, with Route::controller
we can accomplish the same thing as with Route::resource
and we can specify only the needed actions.
They appear to be like siblings:
Route::resource('post','PostController');
How we can choose what to use? What is the best practice?
Solution
RESTful Resource controller
A RESTful resource controller sets up some default routes for you and even names them.
Gives you these named routes:
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
And you would set up your controller something like this (actions = methods)
public function index() {}
public function show($id) {}
public function store() {}
}
You can also choose what actions are included or excluded like this:
'only' => ['index', 'show']
]);
Route::resource('monkeys', 'MonkeysController', [
'except' => ['edit', 'create']
]);
RESTful Resource Controller documentation
Implicit controller
An Implicit controller is more flexible. You get routed to your controller methods based on the HTTP request type and name. However, you don’t have route names defined for you and it will catch all subfolders for the same route.
Would lead you to set up the controller with a sort of RESTful naming scheme:
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'
}
}
Implicit Controller documentation
It is good practice to use what you need, as per your preference. I personally don’t like the Implicit controllers, because they can be messy, don’t provide names and can be confusing when using php artisan routes. I typically use RESTful Resource controllers in combination with explicit routes.
The other opinion is that you might not want to create too many controllers for every action, that would include all the CRUD methods. In that case, use the Implicit controllers.
from Linux Hint https://ift.tt/3gwXigP
0 Comments