2014-05-06 24 views
69

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.Laravel - Route :: resource vs Route :: controller

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

Essi sembrano essere come fratelli:

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

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

+10

Solo una nota per gli utenti di Laravel 5.2, mentre i controller impliciti sono deprecati. – Roy

+0

Route :: codice add-back controller: https://github.com/shrimpwagon/laravel-route-controller – shrimpwagon

risposta

139

RESTful controllo delle risorse

Un controller risorsa RESTful stabilisce alcuni percorsi di default per voi e anche i nomi di loro.

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

si dà a 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  /users/{user}    update users.update 
DELETE /users/{user}    destroy users.destroy 

e si sarebbe configurare il controller qualcosa di simile (actions = metodi)

class UsersController extends BaseController { 

    public function index() {} 

    public function show($id) {} 

    public function store() {} 

} 

È anche possibile scegliere quali azioni sono compresi o esclusi in questo modo:

Route::resource('users', 'UsersController', [ 
    'only' => ['index', 'show'] 
]); 

Route::resource('monkeys', 'MonkeysController', [ 
    'except' => ['edit', 'create'] 
]); 

RESTful Resource Controller documentation


controllore implicito

Un controllore 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'); 

Vuoi portare 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' 
    } 

} 

Implicit Controller documentation


E 'buona norma usare quello che vi serve, secondo la vostra preferenza. Personalmente non mi piacciono i controller impliciti, perché possono essere disordinati, non fornire nomi e possono confondere quando si utilizza php artisan routes. In genere utilizzo i controller di risorse RESTful in combinazione con percorsi espliciti.

+0

Se utilizziamo più route di risorse (forse index, show) perché non utilizzare route statiche Route :: get (. ..)? Penso che non sia meglio non peggiore di usare array ('only' => array ('index', 'show'). E quale metodo viene usato per il controller RESTFull quando richiediamo qualcosa come 'user/123', getIndex() funziona per 'utente /' ma con utente/123 ottengo errore NotFoundHttpException (provato nomi diversi getView e altri, funziona solo quando dichiari come Controller @ getView)? – Sonique

+0

Qualcuno può chiarire a cosa serve 'resource.edit'? È un metodo GET , quindi presumo che si supponga di avere informazioni complete su una risorsa, piuttosto che solo informazioni limitate tramite 'resource.show'? – Anthony

+0

@Anthony - 'resource.edit' è per mostrare una modifica Visualizza, in pratica, il modulo per modifica di una risorsa esistente. – ryanwinchester

0

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

E il metodo delle risorse viene utilizzato per creare più percorsi per gestire una varietà di azioni Restful.

Qui il Laravel documentation su questo.

Problemi correlati