Organiza tus rutas en múltiples archivos en Laravel

Organiza tus rutas en múltiples archivos en Laravel
¿Tu archivo de rutas se vuelve un desastre?

Porque seamos honestos, escribir rutas en Laravel es increíble, pero es muy fácil llegar a esto en poco tiempo

Y es cuando comienzas a notar que el amor se ta va por una ventana!

ya no distingues con facilidad las rutas y si este es un proyecto compartido comienzas a tener problemas de conflicto cada vez que alguien hace cambios en este archivo.

por lo cual comienzas a pensar…

¿Cómo puedo solucionar esto?

Y una alternativa es agrupar y dividir las rutas en archivos adicionales que podemos incluir a nuestro archivo routes/web.php o routes/api.php mediante un requiere.

Algo como lo siguiente:

Esto simplifica el archivo, pero…

Deja de ser intuitivo de leer, y sigo teniendo el problema de tener un archivo que se tiene que modificar si requiero agregar rutas adicionales a las que ya se tienen.

Afortunadamente Laravel es increblemente flexible y nos permite hacer muchas, muchas cosas (Sí también barbaridades!).

Así que vamos a ver una forma de llevar la estructura estándar de rutas

A esto

organize-routes-1

Esto se pone bueno verdad.

Pues manos a la obra, que el café se enfría!

 

Reorganizando las rutas

Me gustaría que este ejemplo sea lo mas practico posible, así que decidí clonar este proyecto y usarlo como ejemplo.

dicho esto vamos a comenzar a organizar las rutas.

Lo primero que vamos llevar a cabo es la creación de los directorios web y api dentro del directorio routes como se muestra en la siguiente imagen.

organize-routes-3

Perfecto ya tenemos la base.

Ahora lo único que tienes que hacer es mover el archivo api.php dentro del directorio api ya que no lo vamos a requerir en este ejemplo.

Muy bien, hecho esto, vamos a comenzar con la parte que nos interesa que es el directorio web, dentro de este directorio vamos a crear los siguientes archivos;

  • common.php
  • auth.php
  • admin.php

En este momento nuestro directorio routes luce de la siguiente forma:

organize-routes-1

Introduciendo las rutas comunes

En el archivo common.php meteremos las rutas que son comunes y publicas para toda la aplicación.

En este ejemplo solo tenemos la redirección,

Agrega las rutas para auth

Ya que tenemos las rutas comunes, en el archivo auth.php vamos a meter todas las rutas que utiliza la autentificación.

Las rutas para admin no pueden faltar

Para finalizar en el archivo admin.php copia el contenido donde se agrupan las rutas para Admin.

Excelente, ya solo nos falta decirle a Laravel donde tiene que encontrar las rutas.

¿Cómo hacemos eso?

Donde se hace la magia

Esta parte se lleva acabo en el archivo app/Providers/RouteServiceProvider.php en los siguientes métodos:

Si observas, la forma en que se cargan las rutas es ubicando el archivo mediante el helper base_path.

Muy bien, vamos a cambiar el método group para que haga lo que requerimos, así que lo primero es crear un método que se va a llamar requiereRoutes de la siguiente forma:

¿Que esta pasando aquí?,

muy sencillo; primero buscamos todos los archivos que terminen en la extensión php que se encuentren el directorio que yo le indico a la clase Finder.

Posterior a eso, todos los archivos encontrados los voy a iterar mediante una colección para incluirlos mediante require y tener disponible las rutas.

Ahora ¿donde vamos a usar esto?,

En los métodos mapWebRoutes y mapApiRoutes y mas específicamente en donde se hace el group. Afortunadamente, este método puede aceptar un closure y en el podemos usar nuestro nuevo método requireRoutes($path).

De esa forma nuestro código debe de quedar de la siguiente forma:

Y listo!, ya debe de estar funcionando nuestra organización de rutas.

y si necesitas una prueba, te invito a clonar los resultados en este repositorio; y probar por ti mismo que todo funciona de forma adecuada.

Eso es todo amigos

Con estos cambios podemos seguir disfrutando de crear rutas en Laravel con la ventaja de tener archivos separados y con un nombre que describe su contenido.

Obviamente toda solución viene con un precio, asi que esto puede tener desventajas; la mas obvia es que ahora no todo esta a simple vista,

La otra menos obvia es el orden de las rutas, si te das cuenta el orden de lectura de los archivos es la que tienen en el sistema, así que si no tienes bien planeadas las rutas puedes obtener resultados inesperados.

Pero si las organizas bien, obtienes el resultado esperado como en nuestro ejemplo.

Si quieres ver otras formas de organizar las rutas, puedes ver como lo hace Sergio Ojeda en este post.

Para finalizar espero que te sea de utilidad el articulo y recuerda, si tienes dudas deja tu mensaje!

y no olvides compartir!

Comparte este artículo

Entra en la discusión y deja tu comentario

Veces