Laravel - Routeresource vs RuteController

Laravel - Routeresource vs RuteController

Problem

Jeg leste dokumentasjonen på Laravel -nettstedet, Stack Overflow, og Google, men jeg er ikke sikker på at jeg forstår forskjellen mellom Rute :: Ressurs og Rute :: kontroller.

Ett svar jeg fant sa Rute :: Ressurs var for rå. Imidlertid med Rute :: kontroller Vi kan oppnå det samme som med Rute :: Ressurs Og vi kan bare spesifisere de nødvendige handlingene.

De ser ut til å være som søsken:

Rute :: Controller ('Post', 'PostController');
Rute :: Ressurs ('Post', 'PostController');

Hvordan vi kan velge hva vi skal bruke? Hva er den beste praksisen?

Løsning

Avslappende ressurskontroller

En avslappende ressurskontroller setter opp noen standardruter for deg og navngir dem til og med dem.

Rute :: Ressurs ('brukere', 'UsersController');

Gir deg disse navngitte rutene:

Verb Path Action Route Navn
Få /brukere indeksbrukere.indeks
Få /brukere /opprette opprette brukere.skape
Innlegg /brukere lagrer brukere.butikk
Få /brukere /bruker vis brukere.forestilling
Få/brukere/bruker/rediger redigeringsbrukere.redigere
Sett | Patch /brukere /bruker Oppdater brukere.Oppdater
Slett /brukere /bruker ødelegge brukere.ødelegge

Og du vil sette opp kontrolleren din noe slikt (handlinger = metoder)

Klassebrukere Controller utvider BaseController
offentlig funksjonsindeks ()
offentlig funksjonshow ($ id)
public Function Store ()

Du kan også velge hvilke handlinger som er inkludert eller ekskludert slik:

Rute :: Ressurs ('brukere', 'UsersController', [
'Bare' => ['Index', 'Show']
]);
Rute :: Ressurs ('Monkeys', 'MonkeysController', [
'Bortsett fra' => ['Rediger', 'Create']
]);

RESTFUL RESSURS CONTROLLER Dokumentasjon

Implisitt kontroller

En implisitt kontroller er mer fleksibel. Du blir dirigert til kontrollmetodene dine basert på HTTP -forespørselstypen og navnet. Du har imidlertid ikke rutenavn definert for deg, og det vil fange alle undermapper for samme rute.

Rute :: Controller ('brukere', 'UserController');

Vil føre deg til å sette opp kontrolleren med et slags avslappende navneskjema:

klasse UserController utvider BaseController
offentlig funksjon getIndex ()

// Få forespørsel til indeksering

offentlig funksjon getShow ($ id)

// Få forespørsel til 'brukere/show/id'

offentlig funksjon Poststore ()

// Legg ut forespørsel til 'brukere/butikk'

Implisitt kontrollerdokumentasjon
Det er god praksis å bruke det du trenger, i henhold til din preferanse. Jeg personlig liker ikke de implisitte kontrollerne, fordi de kan være rotete, ikke oppgi navn og kan være forvirrende når du bruker PHP Artisan -ruter. Jeg bruker vanligvis avslappende ressurskontrollere i kombinasjon med eksplisitte ruter.

Den andre oppfatningen er at du kanskje ikke vil lage for mange kontrollere for hver handling, som vil omfatte alle CRUD -metodene. I så fall kan du bruke implisitte kontroller.