Laravel – Route :: resource vs Route :: controller

Ho letto i documenti sul sito Web di Laravel, Stack Overflow e Google, ma ancora non capisco la differenza tra Route::resource e Route::controller .

Una delle risposte ha detto che Route :: resource era per crud. Tuttavia, con Route :: controller possiamo realizzare la stessa cosa con Route :: resource e possiamo specificare solo le azioni necessarie.

Sembrano come fratelli:

 Route::controller('post','PostController'); Route::resource('post','PostController'); 

Come possiamo scegliere cosa usare? Cos’è una buona pratica?

RESTful Controller di risorse

Un controller risorse RESTful imposta alcune rotte predefinite per te e persino le chiama.

 Route::resource('users', 'UsersController'); 

Ti dà questi percorsi denominati:

 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 

E avresti impostato il tuo controller qualcosa come questo (actions = methods)

 class UsersController extends BaseController { public function index() {} public function show($id) {} public function store() {} } 

Puoi anche scegliere quali azioni includere o escludere in questo modo:

 Route::resource('users', 'UsersController', [ 'only' => ['index', 'show'] ]); Route::resource('monkeys', 'MonkeysController', [ 'except' => ['edit', 'create'] ]); 

Documentazione di RESTful Resource Controller

Controller implicito

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

 Route::controller('users', 'UserController'); 

Ti porterebbe a configurare il controller con una sorta di schema di denominazione 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' } } 

Documentazione implicita del controller

È buona norma usare ciò di cui hai bisogno, secondo le tue preferenze. Personalmente non mi piacciono i controller Implicit , perché possono essere disordinati, non fornire nomi e possono essere fonte di confusione quando si utilizzano php artisan routes . In genere utilizzo i controller di risorse RESTful in combinazione con percorsi espliciti.

Per il metodo del controller di rotta, dobbiamo definire solo una rotta. Nel metodo get o post dobbiamo definire il percorso separatamente.

E il metodo delle risorse viene utilizzato per creare percorsi multipli per gestire una varietà di azioni restful.

Ecco la documentazione di Laravel su questo.