Laravel - RouterSource vs RouteController

Laravel - RouterSource vs RouteController

Problema

Ho letto la documentazione sul sito Web di Laravel, Stack Overflow e Google, tuttavia non sono sicuro di capire la differenza tra Route :: Resource E Percorso :: Controller.

Una risposta che ho trovato ha detto Route :: Resource era per Crud. Tuttavia, con Percorso :: Controller Possiamo realizzare la stessa cosa di Route :: Resource e possiamo specificare solo le azioni necessarie.

Sembrano essere fratelli:

Route :: Controller ('Post', 'PostController');
Route :: Resource ('Post', 'PostController');

Come possiamo scegliere cosa usare? Qual è la migliore pratica?

Soluzione

Controller di risorse riposante

Un controller di risorse riposante imposta alcuni percorsi predefiniti per te e persino le nomina.

Route :: Resource ('Users', 'Usersontroller');

Ti dà questi percorsi chiamati:

Verb Path Action Route Nome
Get /utenti indicizzano gli utenti.indice
Ottieni /utenti /crea crea utenti.creare
Post /Users Store utenti.negozio
Get /utenti /user mostra gli utenti.spettacolo
Get/utenti/user/modifica modifica utenti.modificare
Put | patch /utenti /user aggiorna gli utenti.aggiornamento
DelEte /Users /user Distruggi gli utenti.distruggere

E imposteresti il ​​tuo controller qualcosa del genere (Actions = Methods)

Class Usersontroller estende BaseController
INDICE FUNZIONE PUBBLICA ()
Funzione pubblica Show ($ id)
Store di funzioni pubbliche ()

Puoi anche scegliere quali azioni sono incluse o escluse in questo modo:

Route :: Resource ("Utenti", "Usersontroller", [
'Solo' => ['indice', 'mostra']
]);
Route :: Resource ("Monkeys", "MonkeyController", [
'Tranne' => ['modifica', 'crea']
]);

Documentazione del controller di risorse riposante

Controller implicito

Un controller implicito è più flessibile. Vieni indirizzato ai metodi del controller in base al tipo e al nome della richiesta HTTP. Tuttavia, non hai i nomi del percorso definiti per te e catturerà tutte le sottocartelle per lo stesso percorso.

Route :: Controller ("Utenti", "UserController");

Ti porterebbe a impostare il controller con una sorta di schema di denominazione riposante:

Class UserController estende BaseController
funzione pubblica getIndex ()

// Ottieni una richiesta di indicizzare

Funzione pubblica GetShow ($ ID)

// Ottieni richiesta a "Utenti/Show/id"

funzione pubblica poststore ()

// Pubblica richiesta a 'utenti/store'

Documentazione implicita del controller
È buona pratica usare ciò di cui hai bisogno, secondo le tue preferenze. Personalmente non mi piacciono i controller impliciti, perché possono essere disordinati, non forniscono nomi e possono essere confusi quando si utilizzano percorsi artigianali PHP. In genere uso i controller di risorse riposanti in combinazione con percorsi espliciti.

L'altra opinione è che potresti non voler creare troppi controller per ogni azione, che includerebbe tutti i metodi CRUD. In tal caso, utilizzare i controller impliciti.