J'ai lu la documentation sur le site Web Laravel, Stack Overflow et Google, mais je ne comprends toujours pas la différence entre Route::resource
et Route::controller
.
Une des réponses a dit Route :: resource était pour crud. Cependant, avec Route :: controller, nous pouvons accomplir la même chose qu'avec Route :: resource et nous ne pouvons spécifier que les actions nécessaires.
Ils semblent être comme des frères et soeurs:
Route::controller('post','PostController');
Route::resource('post','PostController');
Comment pouvons-nous choisir quoi utiliser? Quelle est la bonne pratique?
Un contrôleur de ressources RESTful configure pour vous certaines routes par défaut et les nomme même.
Route::resource('users', 'UsersController');
Vous donne ces itinéraires nommés:
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
Et vous configureriez votre contrôleur à peu près comme ceci (actions = méthodes)
class UsersController extends BaseController {
public function index() {}
public function show($id) {}
public function store() {}
}
Vous pouvez également choisir quelles actions sont incluses ou exclues comme ceci:
Route::resource('users', 'UsersController', [
'only' => ['index', 'show']
]);
Route::resource('monkeys', 'MonkeysController', [
'except' => ['edit', 'create']
]);
documentation du contrôleur de ressources RESTful
Un contrôleur implicite est plus flexible. Vous êtes routé vers les méthodes de votre contrôleur en fonction du type et du nom de la requête HTTP. Cependant, aucun nom d’itinéraire n’a été défini pour vous et tous les sous-dossiers seront capturés pour le même itinéraire.
Route::controller('users', 'UserController');
Cela vous amènerait à configurer le contrôleur avec une sorte de schéma de nommage 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'
}
}
documentation du contrôleur implicite
C'est une bonne pratique d'utiliser ce dont vous avez besoin, selon vos préférences. Personnellement, je n'aime pas les contrôleurs implicites , car ils peuvent être compliqués, ne fournissent pas de noms et peuvent être source de confusion lorsque vous utilisez php artisan routes
. J'utilise généralement des contrôleurs de ressources RESTful en combinaison avec des routes explicites.
Pour la méthode du contrôleur d'itinéraire, nous devons définir un seul itinéraire. Dans la méthode get ou post, nous devons définir la route séparément.
Et la méthode des ressources est utilisée pour créer plusieurs itinéraires permettant de gérer diverses actions reposantes.
Ici le Laravel documentation à ce sujet.