Organización de rutas en Laravel

Hola Habr Recientemente, acepté una revisión de un sitio ordenado por cuenta propia. Esperaba ver controladores que hicieran todo y ocuparan más de 200 líneas (y otras manifestaciones de código incorrecto), pero todo fue bastante decente. La validación no se encontraba en el controlador, lo cual es bastante común. A veces, por supuesto, había algunas inconsistencias de PSR-2, pero todo parecía estar bien hasta que revisé el archivo con las rutas. Ocupaba varias pantallas y tenía comentarios sobre los grupos de ruta. Me puse en contacto con el desarrollador y me dijo que todo había "crecido" un poco y aceptó arreglarlo. En la siguiente versión, vi que creó varias clases con métodos estáticos, a los que transfirió el código y los llamó, como suele hacerse, con autorización. Entonces recordé que ya me había encontrado con esto y me encontré con un argumento así: "La documentación no dice nada acerca de tomar rutas a diferentes archivos". Solo unos minutos después encontré un artículo y lo envié al desarrollador. Después de media hora, recibí las rutas en forma normal y decidí que este artículo sería útil para muchos principiantes. Así nació esta traducción gratuita.

Si nunca ha editado el archivo RouteServiceProvider, bienvenido a cat.

Si está trabajando con un proyecto pequeño y solo tiene un par de rutas, entonces no habrá problemas. Pero cuando el número de rutas es demasiado grande, trabajar en un archivo se vuelve difícil, especialmente cuando tiene páginas para diferentes usuarios, administradores, etc.

Inicialmente, laravel crea 4 archivos:

  • api.php
  • console.php
  • canales.php
  • web.php

Suponga que planea crear un proyecto con diez páginas para cada tipo de usuario:

  • Administrador [configuración del sitio, estadísticas, etc. ]
  • Usuario [registro, inicio de sesión, gestión de perfiles, etc. ]
  • Invitados [blog, contactos, etc. ]

Cree dos directorios dentro de las rutas :

  • web : aquí están todas las rutas asociadas con la interfaz web.
  • api : aquí están todas las rutas relacionadas con API


Movemos api.php de las rutas al directorio routes / api y web.php en routes / web , y dejamos el resto de console.php y canales.php en las rutas.

Cree el archivo admin.php dentro de routes / web . Este archivo contendrá todas nuestras rutas web asociadas con el administrador, y luego creará user.php allí para las rutas asociadas con el usuario.



app / Providers / RouteServiceProvider.php : este archivo es responsable de descargar todas las rutas de nuestra aplicación. El método map () llama a los métodos mapApiRoutes () y mapWebRoutes () para cargar los archivos web.php y api.php que ya hemos movido, así que arreglemos las rutas a los archivos de ruta.

protected function mapWebRoutes() { Route::middleware('web') ->namespace($this->namespace) ->group(base_path('routes/web/web.php')); } 

 protected function mapApiRoutes() { Route::prefix('api') ->middleware('api') ->namespace($this->namespace) ->group(base_path('routes/api/api.php')); } 

Ahora cree nuevos métodos para routes / web / admin.php y routes / web / user.php dentro de RouteServiceProvider.php

 protected function mapAdminWebRoutes() { Route::middleware('web') ->namespace($this->namespace) ->prefix('admin') ->group(base_path('routes/web/admin.php')); } 

 protected function mapUserWebRoutes() { Route::middleware('web') ->namespace($this->namespace) ->prefix('user') ->group(base_path('routes/web/user.php')); } 

Tenga en cuenta que en este código es posible agregar espacios de nombres, middleware, prefijos, etc. para las rutas.

A continuación, simplemente llámalos desde map ():

 public function map() { $this->mapApiRoutes(); $this->mapWebRoutes(); $this->mapAdminWebRoutes(); $this->mapUserWebRoutes(); } 

Ultimo paso:

Abra rutas / web / user.php y agregue una ruta de prueba:

 Route::get('/test', function () { return response(' ', 200); }); 

Vaya a site.local / user / test, debería ver el texto "Ruta de prueba".

Source: https://habr.com/ru/post/474788/


All Articles