Ese 404 en Laravel que no esperabas: el orden de las rutas importa (y mucho)
-
- Admin User
- June 07, 2025
Hace poco me encontré con un problema curioso mientras implementaba un CRUD para categorías en mi blog hecho con Laravel. Todo funcionaba perfectamente: podía listar, editar y eliminar categorías… pero al intentar crear una nueva, el formulario me llevaba a un error 404. 🤯
¿Qué estaba pasando?
La ruta GET /categories/create funcionaba. El formulario se cargaba con su campo de nombre y el botón de “Crear”. Sin embargo, al hacer clic, la petición POST /categories devolvía un 404. Revisé el controlador, la vista, el formulario, el método... todo parecía correcto. Incluso php artisan route:list mostraba que la ruta estaba registrada:
POST /categories → categories.store → CategoryController@store
El culpable: una ruta genérica mal ubicada
Tras muchas pruebas (inspeccionar la acción del formulario, revisar el token CSRF, limpiar caché, probar con cURL...), encontré al culpable: tenía esta ruta definida antes que las del recurso:
Route::get('{id}/{slug}', [PostController::class, 'show'])->name('posts.show');
Esta ruta está pensada para mostrar un post por su ID y slug. Pero al estar antes de Route::resource('categories', ...), Laravel la interpretaba como la primera coincidencia para cualquier ruta sin match exacto. /categories era una de ellas, por lo que la petición POST nunca llegaba a su destino legítimo.
La solución: respetar el orden de las rutas
La solución fue tan sencilla como mover la ruta genérica al final del archivo web.php:
// ✅ Primero las rutas específicas
Route::resource('categories', CategoryController::class);
// ✅ Luego las más genéricas
Route::get('{id}/{slug}', [PostController::class, 'show'])->name('posts.show');
Con eso, la creación de categorías funcionó como debía. El formulario ya no era interceptado y el CRUD quedó completo.
Lecciones aprendidas
- Laravel evalúa las rutas en orden: la primera coincidencia que encaje con una URL es la que se ejecuta.
- Las rutas genéricas deben ir al final: evita comodines amplios al principio del archivo.
- Comandos como
route:listo herramientas como cURL son clave: confirman si Laravel está escuchando donde tú crees. - Un error 404 no siempre es “falta la vista”: a veces es una colisión silenciosa en el enrutador.
Consejo final
Si estás trabajando con Route::resource, mantén tu archivo web.php ordenado. Agrupa rutas por funcionalidad, evita comodines tempranos y reserva las rutas genéricas como /{slug} o /{id} para el final.
“El orden de las rutas en Laravel no es solo cuestión de estética. Es cuestión de funcionamiento.”
Diego O.Si esta historia te ha resultado útil, compártela. Quizás alguien más esté atrapado en un 404 que no le pertenece.
Latest Posts
-
1
-
2
-
3
-
4Aug 08, 2025
Categories
- Economía 3 Posts
- Formación 4 Posts
- Opinión 5 Posts
- Programación 11 Posts
- Proyectos 2 Posts
- Tecnología 2 Posts