Bonjour, Habr. Récemment, j'ai accepté de revoir un site commandé en freelance. Je m'attendais à voir des contrôleurs qui font tout et occupent plus de 200 lignes (et d'autres manifestations de mauvais code), mais tout était assez décent. La validation ne réside pas dans le contrôleur, ce qui est assez courant. Parfois, bien sûr, il y avait des incohérences PSR-2, mais tout allait bien jusqu'à ce que j'examine le fichier avec les itinéraires. Il occupait plusieurs écrans et avait des commentaires sur les groupes de routes. J'ai contacté le développeur et il a dit que tout avait un peu «grandi» et a accepté de le réparer. Dans la version suivante, j'ai vu qu'il a créé plusieurs classes avec des méthodes statiques, dans lesquelles il a transféré le code et les a appelées, comme c'est généralement le cas, avec autorisation. Ensuite, je me suis souvenu que j'avais déjà rencontré cela et rencontré un tel argument: "La documentation ne dit rien sur la prise de routes vers différents fichiers." Quelques minutes plus tard, j'ai trouvé un article et l'ai envoyé au développeur. Après une demi-heure, j'ai reçu les itinéraires sous forme normale et j'ai décidé que cet article serait utile pour de nombreux débutants. Cette traduction gratuite est donc née.
Si vous n'avez jamais modifié le fichier RouteServiceProvider, bienvenue sur cat.
Si vous travaillez avec un petit projet et que vous n'avez que quelques itinéraires, il n'y aura aucun problème. Mais lorsque le nombre de routes est trop important, travailler dans un seul fichier devient difficile, surtout lorsque vous avez des pages pour différents utilisateurs, administrateurs, etc.
Au départ, laravel crée 4 fichiers:
- api.php
- console.php
- canaux.php
- web.php
Supposons que vous envisagez de créer un projet avec dix pages pour chaque type d'utilisateur:
- Administrateur [paramètres du site, statistiques, etc. ]
- Utilisateur [inscription, connexion, gestion de profil, etc. ]
- Invités [blog, contacts, etc. ]
Créez deux répertoires à l'intérieur des
routes :
- web - voici toutes les routes associées à l'interface web.
- api - voici toutes les routes liées à l'API
Nous déplaçons
api.php de
routes vers les
répertoires routes / api et
web.php dans
routes / web , et laissons le reste de
console.php et
channels.php dans routes.
Créez le fichier
admin.php dans
routes / web . Ce fichier contiendra tous nos itinéraires Web associés à l'administrateur, puis y créera
user.php pour les itinéraires associés à l'utilisateur.
app / Providers / RouteServiceProvider.php - ce fichier est responsable du téléchargement de tous les itinéraires de notre application. La méthode
map () appelle les
méthodes mapApiRoutes () et
mapWebRoutes () pour charger les fichiers
web.php et
api.php que nous avons déjà déplacés,
fixons donc les chemins d'accès aux fichiers d'itinéraire.
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')); }
Créez maintenant de nouvelles méthodes pour
routes / web / admin.php et
routes / web / user.php dans
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')); }
Veuillez noter que dans ce code, il est possible d'ajouter un espace de noms, un middleware, un préfixe, etc. pour les chemins.
Ensuite, il suffit de les appeler depuis map ():
public function map() { $this->mapApiRoutes(); $this->mapWebRoutes(); $this->mapAdminWebRoutes(); $this->mapUserWebRoutes(); }
Dernière étape:
Ouvrez routes / web / user.php et ajoutez une route de test:
Route::get('/test', function () { return response(' ', 200); });
Allez sur site.local / user / test, vous devriez voir le texte «Test Route».