En el módulo de usuarios que creamos para el curso básico de Laravel 5, creamos un controlador de tipo resource, el cual resulta muy práctico si necesitamos las acciones básicas de cualquier módulo: crear, editar, listar, eliminar y ver, pero ¿Qué sucede si necesitamos una acción extra? Por ejemplo, si quisiéramos una nueva acción para crear un reporte de usuarios ¿Cómo incluimos la nueva ruta al resource controller?

Quizás lo primero que se te ocurra es hacer esto:

Route::resource('users', 'UsersController');
Route::get('users/report', 'UsersController@report');

Pero si haces eso, obtendrás un error como el siguiente:

laravel error

No query results for model [Course\User].

Esto sucede porque la ruta asignada para el método UsersController@show tiene el siguiente formato:  admin/users/{users} y el parámetro users por defecto no tiene restricciones, es decir, puede ser un número o una cadena de texto…

¿Entonces cuando tipeo users/report en el navegador se está llamando al método show con el parámetro «report» en vez del método report?

¡Exacto! Puedes solucionar esto de dos formas:

La primera y más fácil es invertir el orden de las rutas:

Route::get('users/report', 'UsersController@report');
Route::resource('users', 'UsersController');

Esto soluciona el problema porque el orden de las rutas es importante para Laravel, entonces ahora la ruta users/report tendrá precedencia sobre la ruta show y las demás rutas del resource controller.

La segunda forma, sería definir un «patrón» para el parámetro «users», y esto se hace con esta función:

Route::pattern('users', '[0-9]+');

Por supuesto, tienes que colocarla antes de definir tu resource controller, pero ahora no importa si colocas el resource controller antes de la ruta para users/report

Esta función limita al parámetro users a sólo números, por lo tanto «report» ya no será un parámetro users válido y users/report no coincidirá con la ruta «users.show»

Este tutorial, aunque básico, te mostró un par de tips interesantes para escribir rutas en Laravel, no olvides revisar los otros tutoriales de Laravel 5 y Laravel 4 para aprender más sobre rutas y otros temas de este maravilloso framework.

¿Te sabes otros tips de Laravel? Para compartirlos escríbeme a i[arroba]duilio[punto]me y los publicaremos en este sitio.

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección siguiente Múltiples bases de datos con Laravel 5 y Eloquent