Si estás comenzando a trabajar con Laravel, te encantará la forma cómo puedes definir las rutas (o también conocidas como «end points») de tus proyectos.

Pero a medida que los proyectos en los cuales trabajas crecen, tu archivo routes.php puede llegar a crecer bastante, y con varios programadores trabajando en él, el control de versiones (git) puede tornarse difícil (por los conflictos que pueden surgir de varios desarrolladores trabajando en el mismo archivo (routes.php) a la vez.

Lo que quizás no sepas, es que al ser routes.php un archivo de PHP común y corriente, puedes reorganizarlo o dividido de la manera que quieras.

Una forma que me ha funcionado bastante bien, es dividir mis rutas en diferentes archivos, dependiendo del tipo de ésta:

  • Rutas visibles para todos (website)
  • Rutas visibles sólo para usuarios anónimos (guest)
  • Rutas visibles sólo para usuarios conectados (auth o user)
  • y rutas sólo disponibles dependiendo del rol del usuario, por ejemplo sólo para administradores (admin)

Yo suelo conservar los middleware en el archivo principal, de esta manera puedo tener una visión general de cómo está protegido y dividido mi proyecto, y todas las rutas de cada area de la aplicación las coloco en archivos aparte. Mi archivo routes.php queda comúnmente de esta forma:

require __DIR__ . '/routes/website.php';

Route::group(['namespace' => 'Guest', 'middleware' => 'guest'], function () {
    require __DIR__ . '/routes/guest.php';
});

Route::group(['middleware' => 'auth'], function () {

    require __DIR__ . '/routes/auth.php';

    Route::group([
        'prefix'     => 'admin',
        'namespace'  => 'Admin',
        'middleware' => 'role:admin'
    ], function () {
        require __DIR__ . '/routes/admin.php';
    });
});

__DIR__ en PHP retorna el directorio en el que se encuentra el archivo actual.

Por supuesto, en Http/ creo una nueva carpeta llamada routes/ donde creo los nuevos archivos de rutas:

rutas-organizadas-laravel

Dentro de cada archivo estarán las declaraciones de las rutas, por ejemplo dentro de guest.php:

// Login
Route::get('login', [
    'as'   => 'login',
    'uses' => 'AuthController@getLogin'
]);
Route::post('login', [
    'uses' => 'AuthController@postLogin'
]);

// Register
Route::get('register', [
    'as'   => 'register',
    'uses' => 'RegisterController@signUp'
]);
Route::post('signup', [
    'uses' => 'RegisterController@register'
]);

Verás las rutas para iniciar sesión, registrarte, recuperar contraseña etc. Mientras que por ejemplo dentro de auth.php estarán las rutas para editar el perfil, cambiar contraseña, etc.

Por supuesto, la manera de organizar tus rutas dependerá de la complejidad y las especificaciones del proyecto en el que estés trabajando. No hay una solución que funcione para todos los casos, pero espero que este tutorial te de más ideas para organizar tu proyecto.

Recuerda que si quieres ver un tutorial o curso en Styde, puedes solicitarlo en Teach Me, y si quieres aprender más sobre este Laravel y PHP, tenemos muchos cursos para ti desde cero a nivel avanzado, incluyendo mi nuevo curso Primeros pasos con Laravel 5.* que está disponible para todos.

Material relacionado

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Artisan, la interfaz de línea de comandos de Laravel Lección siguiente Grupos de rutas en Laravel 5.*