IronWoods.es

Desarrollo web

Blog / Laravel / Separar las rutas en varios ficheros en Laravel 5

Una aplicación requiere, habitualmente, de decenas o cientos de rutas. Hasta Laravel 5.2 estas se emplazaban en un sólo fichero lo que puede ser engorroso, siendo conveniente separarlas en varios, atendiendo a su uso.

Esta entrada es específica para las versiones 5.0 a 5.2 de Laravel.

Ejemplo: e-shop

Voy a explicar cómo dividir el fichero original, de rutas de Laravel, en varios, a través de un pequeño ejemplo. Crearé dos ficheros de rutas, uno para las del "front" y otro para las del "back", es decir, en el primero pondremos todas las rutas de las páginas que verá el público en general y los clientes, y en el segundo las rutas de las páginas de gestión y administración de la tienda.

Si eres nuevo en Laravel, el fichero con las rutas es este: "app/Http/routes.php". Cuando acabemos ya no lo vamos a necesitar, aunque sería perfectamente válido dejarlo con las rutas principales, como la página de inicio, las condiciones legales, página de contacto, etc.

Paso a paso...

1. Crear directorio para las rutas

Creo el directorio "app/Http/Routes/".

Cómo el ejemplo es muy sencillo y sólo crearemos dos ficheros, puedes omitir este paso y dejarlos en el directorio donde viene el fichero de rutas original.


2. Crear los ficheros con las rutas

Guardamos el fichero original de rutas en el directorio anteriormente creado, hacemos una copia y renombramos ambos ficheros a "back-routes.php" y "front-routes.php". Si ya teníamos varias rutas creadas en el fichero original, editamos ambos ficheros dejando en cada uno las que correspondan.


3. Modificar la carga de las rutas en la aplicación

Las rutas se cargan en la clase RouteServiceProvider contenida en "app/Providers/RouteServiceProvider.php", en su método map(). Es fácil adivinar como hacer el cambio; yo hice una prueba y funcionó a la primera.

Código original:

$router->group([ 'namespace' => $this->namespace ], function ( $router ) {

require app_path( 'Http/routes.php' );

});


Código final:

$router->group([ 'namespace' => $this->namespace ], function ( $router ) {

require app_path( 'Http/Routes/back-routes.php' );

require app_path( 'Http/Routes/front-routes.php' );

});


Y sólo queda probar...


05-11-2017 (actualizado 29-06-2019)