Laravel - Routeresource vs Routecontroller

Laravel - Routeresource vs Routecontroller

Problema

Leí la documentación en el sitio web de Laravel, Stack Overflow y Google, sin embargo, no estoy seguro de entender la diferencia entre Ruta :: recurso y Ruta :: controlador.

Una respuesta que encontré dijo Ruta :: recurso fue para crud. Sin embargo, con Ruta :: controlador Podemos lograr lo mismo que con Ruta :: recurso y solo podemos especificar las acciones necesarias.

Parecen ser como hermanos:

Ruta :: controlador ('post', 'postcontroller');
Ruta :: recurso ('post', 'postcontroller');

Cómo podemos elegir qué usar? Cual es la mejor practica?

Solución

Controlador de recursos RESTful

Un controlador de recursos RESTFUL establece algunas rutas predeterminadas para usted e incluso las nombra.

Ruta :: Resource ('Usuarios', 'UsersController');

Te da estas rutas nombradas:

Nombre de ruta de acción de la ruta verbal
Get /Usuarios índices de usuarios.índice
Get /Users /Crear Usuarios Crear.crear
Publicar /usuarios de los usuarios de la tienda.almacenar
Get /users /user Mostrar usuarios.espectáculo
Get/users/user/editar usuarios.editar
Poner | Patch /Users /User Actualizar usuarios.actualizar
Eliminar /usuarios /usuario destruir usuarios.destruir

Y configuraría su controlador algo como esto (Acciones = Métodos)

Class UserScontroller extiende Basecontroller
Index de funciones públicas ()
Show de función pública ($ id)
tienda de funciones públicas ()

También puede elegir qué acciones están incluidas o excluidas así:

Ruta :: Resource ('Usuarios', 'UsersController', [
'solo' => ['índice', 'show']
]);
Ruta :: Resource ('Monkeys', 'MonkeysController', [
'excepto' => ['editar', 'crear']
]);

Documentación del controlador de recursos RESTFUL

Controlador implícito

Un controlador implícito es más flexible. Te enrutan a los métodos de su controlador en función del tipo de solicitud HTTP y el nombre. Sin embargo, no tiene nombres de ruta definidos para usted y atrapará todas las subcarpetas para la misma ruta.

Ruta :: controlador ('usuarios', 'UserController');

Te llevaría a configurar el controlador con una especie de esquema de nomenclatura relajante:

clase UserController extiende Basecontroller
función pública getIndex ()

// Obtener la solicitud para indexar

Función pública GetShow ($ ID)

// Obtener solicitud a 'Uss/show/id'

función pública poststore ()

// Publicar solicitud a 'usuarios/almacenar'

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 proporcionar nombres y pueden ser confusos al usar rutas artesanales PHP. Por lo general, uso controladores de recursos RESTful en combinación con rutas explícitas.

La otra opinión es que es posible que no desee crear demasiados controladores para cada acción, que incluiría todos los métodos Crud. En ese caso, use los controladores implícitos.