Volver a la página principal
lunes 7 octubre 2024
11

Cómo agrupar rutas en Laravel

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.

¿Qué es un Grupo de Rutas en Laravel?

Un grupo de rutas es un conjunto de rutas que comparten la misma configuración. Puedes agrupar rutas para aplicar características comunes como:

  • Prefijos de URL (prefix)
  • Nombres de controladores (namespace)
  • Middleware (middleware)
  • Dominios (domain)
  • Nombres de rutas (as)

Agrupar rutas es útil para estructurar mejor tu aplicación y evitar repetir configuraciones en cada ruta.

Ejemplo básico de agrupar rutas

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';
    });
});

Explicación:

  • prefix => 'admin': Todas las rutas dentro del grupo tendrán el prefijo /admin.
  • Rutas generadas:
  • /admin/dashboard
  • /admin/users

Agrupar rutas con Middleware

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';
    });
});

Explicación:

  • middleware => ['auth']: Todas las rutas dentro del grupo solo estarán disponibles si el usuario está autenticado.
  • Rutas generadas:
  • /profile
  • /settings

Laravel aplicará el *middleware* auth a todas las rutas dentro del grupo.

Agrupar rutas con Prefijo de URL

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';
    });
});

Explicación:

  • prefix => 'api': Todas las rutas tendrán el prefijo /api.
  • Rutas generadas:
  • /api/users
  • /api/posts

Esto es ideal para estructurar rutas de una API o de secciones administrativas.

Agrupar rutas con Nombre de Espacio (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');
});

Explicación:

  • namespace => 'Admin': Laravel buscará los controladores dentro del espacio de nombres App\Http\Controllers\Admin.
  • Rutas generadas:
  • /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.

Agrupar rutas con Nombre de Ruta (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';
    }]);
});

Explicación:

  • as => 'admin.': Se añade el prefijo admin. a los nombres de todas las rutas del grupo.
  • Rutas generadas:
  • Nombre de la ruta /dashboard será admin.dashboard.
  • Nombre de la ruta /users será admin.users.

Esto facilita referenciar rutas con un prefijo común desde plantillas o controladores.

Combinación de múltiples opciones en grupos de rutas

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');
});

Explicación:

  • 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)

Agrupar rutas con Dominios personalizados

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';
    });
});

Explicación:

  • domain => 'admin.misitio.com': Las rutas solo estarán disponibles si se accede desde el subdominio admin.misitio.com.
  • Rutas generadas:
  • http://admin.misitio.com/dashboard
  • http://admin.misitio.com/settings

Resumen de las opciones más comunes para agrupar rutas

  • 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.

Referencia oficial

Para más información sobre cómo agrupar rutas en Laravel, consulta la documentación oficial de Laravel sobre Rutas.

Etiquetas:
php laravel
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer