Organisation d'itinéraires à Laravel

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

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


All Articles