En Laravel, puedes agrupar rutas utilizando la función Route::group
. Agrupar rutas permite aplicar características comunes, como middleware, prefijos de URL o nombres de espacios de controladores, a múltiples rutas. Esto ayuda a organizar y simplificar la definición de rutas en tu aplicación. A continuación, se explican los principales métodos para agrupar rutas en Laravel y cómo utilizarlos.
Un grupo de rutas es un conjunto de rutas que comparten la misma configuración. Puedes agrupar rutas para aplicar características comunes como:
prefix
)
namespace
)
middleware
)
domain
)
as
)
Agrupar rutas es útil para estructurar mejor tu aplicación y evitar repetir configuraciones en cada ruta.
Para agrupar rutas, se usa la función Route::group
que recibe un array de opciones y una función anónima que contiene las rutas que deben compartir esas configuraciones.
Ejemplo básico:
Route::group(['prefix' => 'admin'], function () {
Route::get('/dashboard', function () {
return 'Panel de administrador';
});
Route::get('/users', function () {
return 'Gestión de usuarios';
});
});
prefix
=> 'admin'
: Todas las rutas dentro del grupo tendrán el prefijo /admin
.
/admin/dashboard
/admin/users
Puedes aplicar middleware a un grupo de rutas para verificar condiciones o aplicar lógica antes de que las rutas sean procesadas. Un *middleware* típico podría verificar la autenticación del usuario.
Ejemplo con middleware:
Route::group(['middleware' => ['auth']], function () {
Route::get('/profile', function () {
return 'Perfil del usuario';
});
Route::get('/settings', function () {
return 'Configuración del usuario';
});
});
middleware
=> ['auth']
: Todas las rutas dentro del grupo solo estarán disponibles si el usuario está autenticado.
/profile
/settings
Laravel aplicará el *middleware* auth
a todas las rutas dentro del grupo.
El uso del prefix
permite agregar un prefijo a la URL de todas las rutas dentro del grupo. Esto es útil para organizar rutas con secciones comunes como /admin
, /api
o /user
.
Ejemplo con prefijo de URL:
Route::group(['prefix' => 'api'], function () {
Route::get('/users', function () {
return 'Lista de usuarios';
});
Route::get('/posts', function () {
return 'Lista de publicaciones';
});
});
prefix
=> 'api'
: Todas las rutas tendrán el prefijo /api
.
/api/users
/api/posts
Esto es ideal para estructurar rutas de una API o de secciones administrativas.
namespace
)
El atributo namespace
permite definir el espacio de nombres donde se encuentran los controladores de las rutas dentro del grupo. Esto es útil para organizar los controladores en carpetas.
Ejemplo con namespace
:
Route::group(['namespace' => 'Admin'], function () {
Route::get('/dashboard', 'DashboardController@index');
Route::get('/users', 'UserController@index');
});
namespace
=> 'Admin'
: Laravel buscará los controladores dentro del espacio de nombres App\Http\Controllers\Admin
.
/dashboard
(DashboardController
en App\Http\Controllers\Admin\DashboardController
)
/users
(UserController
en App\Http\Controllers\Admin\UserController
)
Este método facilita la organización de los controladores en módulos.
as
)
El atributo as
establece un prefijo para el nombre de las rutas dentro del grupo. Esto es útil cuando quieres nombrar un grupo de rutas relacionadas con un prefijo común.
Ejemplo con nombre de ruta:
Route::group(['as' => 'admin.'], function () {
Route::get('/dashboard', ['as' => 'dashboard', function () {
return 'Panel de administrador';
}]);
Route::get('/users', ['as' => 'users', function () {
return 'Gestión de usuarios';
}]);
});
as
=> 'admin.'
: Se añade el prefijo admin.
a los nombres de todas las rutas del grupo.
/dashboard
será admin.dashboard
.
/users
será admin.users
.
Esto facilita referenciar rutas con un prefijo común desde plantillas o controladores.
Puedes combinar varias opciones como prefix
, middleware
, as
y namespace
en un mismo grupo de rutas.
Ejemplo combinado:
Route::group([
'prefix' => 'admin',
'middleware' => ['auth'],
'namespace' => 'Admin',
'as' => 'admin.'
], function () {
Route::get('/dashboard', 'DashboardController@index')->name('dashboard');
Route::get('/users', 'UserController@index')->name('users');
});
prefix
=> 'admin'
: Las rutas tendrán el prefijo /admin
.
middleware
=> ['auth']
: Todas las rutas dentro del grupo solo estarán disponibles si el usuario está autenticado.
namespace
=> 'Admin'
: Los controladores se buscarán dentro del espacio de nombres App\Http\Controllers\Admin
.
as
=> 'admin.'
: Los nombres de las rutas se crearán con el prefijo admin.
.
Rutas generadas:
/admin/dashboard
(nombre: admin.dashboard
)
/admin/users
(nombre: admin.users
)
También puedes agrupar rutas basadas en subdominios usando la opción domain
. Esto es útil cuando deseas gestionar subdominios en tu aplicación Laravel.
Ejemplo con dominio personalizado:
Route::group(['domain' => 'admin.misitio.com'], function () {
Route::get('/dashboard', function () {
return 'Panel de administrador';
});
Route::get('/settings', function () {
return 'Configuración del sitio';
});
});
domain
=> 'admin.misitio.com'
: Las rutas solo estarán disponibles si se accede desde el subdominio admin.misitio.com
.
http://admin.misitio.com/dashboard
http://admin.misitio.com/settings
prefix
: Define un prefijo de URL para todas las rutas dentro del grupo.
middleware
: Aplica un middleware a todas las rutas del grupo.
namespace
: Define el espacio de nombres de los controladores dentro del grupo.
as
: Establece un prefijo de nombre para las rutas.
domain
: Aplica un subdominio a las rutas del grupo.
Para más información sobre cómo agrupar rutas en Laravel, consulta la documentación oficial de Laravel sobre Rutas.
Jorge García
Fullstack developer