name - Laravel-Route:: resource versus Route:: controller
route resource laravel 5 (2)
Leí los documentos en el sitio web de Laravel, Stack Overflow y Google, pero aún no entiendo la diferencia entre Route::resource
y Route::controller
.
Una de las respuestas dijo que el recurso Route :: era para basura. Sin embargo, con el controlador Route :: podemos lograr lo mismo que con el recurso Route :: y podemos especificar solo las acciones necesarias.
Parecen ser como hermanos:
Route::controller(''post'',''PostController'');
Route::resource(''post'',''PostController'');
¿Cómo podemos elegir qué usar? ¿Qué es una buena práctica?
Controlador de recursos RESTful
Un controlador de recursos RESTful configura algunas rutas predeterminadas para usted e incluso las nombra.
Route::resource(''users'', ''UsersController'');
Te da estas rutas con nombre:
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
Y configuraría su controlador de esta manera (acciones = métodos)
class UsersController extends BaseController {
public function index() {}
public function show($id) {}
public function store() {}
}
También puede elegir qué acciones están incluidas o excluidas de esta manera:
Route::resource(''users'', ''UsersController'', [
''only'' => [''index'', ''show'']
]);
Route::resource(''monkeys'', ''MonkeysController'', [
''except'' => [''edit'', ''create'']
]);
Documentación RESTful Resource Controller
Controlador implícito
Un controlador implícito es más flexible. Te enrutas a los métodos de tu controlador según el tipo y nombre de solicitud HTTP. Sin embargo, no tiene nombres de ruta definidos para usted y capturará todas las subcarpetas para la misma ruta.
Route::controller(''users'', ''UserController'');
Lo guiaría a configurar el controlador con una especie de esquema de nombres 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''
}
}
Documentación implícita del controlador
Es una buena práctica usar lo que necesita, según su preferencia. Personalmente, no me gustan los controladores implícitos , porque pueden ser desordenados, no proporcionan nombres y pueden ser confusos al usar php artisan routes
. Normalmente utilizo los controladores de recursos RESTful en combinación con rutas explícitas.
Para el método de controlador de ruta, tenemos que definir solo una ruta. En el método get o post tenemos que definir la ruta por separado.
Y el método de recursos se usa para crear múltiples rutas para manejar una variedad de acciones de descanso.
Aquí la documentación de Laravel sobre esto.