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