Laravel - Routeresource vs RouteController

Laravel - Routeresource vs RouteController

Problème

J'ai lu la documentation sur le site Web de Laravel, Stack Overflow et Google, mais je ne suis pas sûr de comprendre la différence entre Route :: ressource et Itinéraire :: contrôleur.

Une réponse que j'ai trouvée dit Route :: ressource était pour crud. Cependant, avec Itinéraire :: contrôleur Nous pouvons accomplir la même chose qu'avec Route :: ressource Et nous pouvons spécifier uniquement les actions nécessaires.

Ils semblent être comme des frères et sœurs:

Route :: Controller («Post», «PostController»);
Route :: Resource («Post», «PostController»);

Comment nous pouvons choisir quoi utiliser? Quelle est la meilleure pratique?

Solution

Contrôleur de ressources reposant

Un contrôleur de ressources reposant configure certains itinéraires par défaut pour vous et même les nomme.

Route :: Resource («Users», «UsersController»);

Vous donne ces itinéraires nommés:

Nom de l'itinéraire d'action du chemin du verbe
Obtenir / indexer les utilisateurs.indice
Obtenir / utilisateurs / créer des utilisateurs.créer
Poster / utilisateurs Store Utilisateurs.magasin
Get / Users / User Afficher les utilisateurs.montrer
Get / Users / User / Modifier les utilisateurs.modifier
Mettre | patch / utilisateurs / utilisateur met à jour les utilisateurs.mise à jour
Supprimer / utilisateurs / utilisateur détruire les utilisateurs.détruire

Et vous configureriez votre contrôleur quelque chose comme ça (actions = méthodes)

Classe UsersController étend BaseController
Index de fonction publique ()
Fonction publique Show ($ id)
Public Function Store ()

Vous pouvez également choisir les actions incluses ou exclues comme celle-ci:

Route :: Resource ('Users', 'UsersController', [
'seulement' => ['index', 'show']
]));
Route :: Resource («Monkeys», «MonkeysController», [
'sauf' => ['édition', 'Create']
]));

Documentation du contrôleur de ressources Restful

Contrôleur implicite

Un contrôleur implicite est plus flexible. Vous êtes acheminé vers vos méthodes de contrôleur en fonction du type et du nom de la demande HTTP. Cependant, vous n'avez pas de noms de route définis pour vous et il attrapera tous les sous-dossiers pour le même itinéraire.

Route :: contrôleur («utilisateurs», «userController»);

Vous amènerait à configurer le contrôleur avec une sorte de schéma de dénomination reposant:

classe UserController étend BaseController
fonction publique getindex ()

// Obtenez une demande d'index

Fonction publique GetShow ($ id)

// Obtenez une demande à 'utilisateurs / show / id'

fonction publique poststore ()

// publie une demande à «utilisateurs / stockage»

Documentation implicite du contrôleur
Il est bon à utiliser ce dont vous avez besoin, selon vos préférences. Personnellement, je n'aime pas les contrôleurs implicites, car ils peuvent être désordonnés, ne fournissent pas de noms et peuvent être déroutants lors de l'utilisation de routes artisanales PHP. J'utilise généralement des contrôleurs de ressources RESTful en combinaison avec des itinéraires explicites.

L'autre opinion est que vous ne voudrez peut-être pas créer trop de contrôleurs pour chaque action, qui inclurait toutes les méthodes CRUD. Dans ce cas, utilisez les contrôleurs implicites.