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)