Comment organiser votre routage dans un grand projet Laravel
Imaginez un projet Laravel avec plus de 100 routes, y compris des modules séparés pour l'invité, l'utilisateur, l'administrateur, etc. Voulez-vous vraiment tout écrire dans un seul fichier ? Alors comment les regrouper et ajouter un préfixe à l’URL ? Voyez quelles méthodes sont disponibles
1. Routage WEB et API séparé
C'est simple, car Laravel l'a déjà fait pour vous. Il y a les deux fichiers suivants :
routes/web.php
routes/api.php
Par conséquent, si votre projet a à la fois des pages frontales et une API (le plus de scénarios d'utilisation (Laiyueguang), veuillez mettre le routage API dans api.php.
Par exemple, si vous avez la page /users et le point de terminaison /api/users/, écrivez-les dans leurs propres fichiers de routage pour éviter toute confusion causée par l'apparition du même nom dans le même fichier.
Mais j'ai récemment vu un contre-exemple du projet officiel Laravel. Dans Laravel Horizon, Taylor n'a que le routage API, mais il ne l'a pas écrit séparément. Il l'a quand même écrit dans routes/web.php :
Un autre exemple prouve que Laravel est. toujours très personnel, même Taylor lui-même n'a pas suivi les normes à 100 %.
2. Regroupez le fichier routes/web.php dans une structure structurée
L'exemple suivant est également issu de la documentation officielle de Laravel :
Route::middleware(['first', 'second'])->group(function () { Route::get('/', function () { // 使用 first 和 second 中间件 }); Route::get('user/profile', function () { // 使用 first 和 second 中间件 }); });
Le plus basique L'utilisation consiste à inclure différents groupes de routage dans différents middleware. Par exemple, vous souhaitez qu'un groupe soit restreint par le middleware d'authentification par défaut, un autre groupe soit restreint par un middleware personnalisé d'administrateur distinct, etc.
De cette façon, vous pouvez également utiliser des méthodes de regroupement d'itinéraires telles que le nom et le préfixe. Encore une fois, l'exemple est donné dans la documentation officielle :
Route::prefix('admin')->group(function () { Route::get('users', function () { // 匹配 URL 「/admin/users」 }); }); Route::name('admin.')->group(function () { Route::get('users', function () { // 路由名为 「admin.users」... })->name('users'); });
De plus, si vous souhaitez ajouter tous les middleware + nom + préfixe à un groupe, c'est plus facile à comprendre en les mettant dans un tableau :
// 而不是这样做: Route::name('admin.')->prefix('admin')->middleware('admin')->group(function () { // ... }); // 可以使用数组 Route::group([ 'name' => 'admin.', 'prefix' => 'admin', 'middleware' => 'auth' ], function () { // ... });
Nous avons combiné cela dans un exemple concret avec trois groupes de routes :
Le groupe "invité" avec l'URL /front/XXXXX et aucun middleware
Avec / le groupe "Utilisateurs" avec user/XXXXX URL et middleware d'authentification
Groupe "Administrateur" avec /admin/XXXXX URL et middleware d'administration personnalisé
Voici comment tout regrouper Une façon de procéder dans le fichier routes/web.php :
Route::group([ 'name' => 'admin.', 'prefix' => 'admin', 'middleware' => 'admin' ], function () { // URL链接:/admin/users // 路由名称:admin.users Route::get('users', function () { return 'Admin: user list'; })->name('users'); }); Route::group([ 'name' => 'user.', 'prefix' => 'user', 'middleware' => 'auth' ], function () { // URL链接:/user/profile // 路由名称:user.profile Route::get('profile', function () { return 'User profile'; })->name('profile'); }); Route::group([ 'name' => 'front.', 'prefix' => 'front' ], function () { // 这里没有中间件 // URL链接:/front/about-us // 路由名称:front.about Route::get('about-us', function () { return 'About us page'; })->name('about'); });
3. Regroupez les contrôleurs à l'aide d'espaces de noms
Dans l'exemple ci-dessus, nous n'utilisons pas de contrôleur, nous avons simplement renvoyé du texte statique à titre d'exemple. Ajoutons un contrôleur et faisons preuve d'un peu de fantaisie - nous les structurerons en dossiers dans leurs propres espaces de noms différents, comme ceci :
Ensuite, nous pourrons les utiliser dans les fichiers de routage :
Route::group([ 'name' => 'front.', 'prefix' => 'front' ], function () { Route::get('about-us', 'Front.boutController@index')->name('about'); });
Mais et si dans ce groupe nous avions beaucoup de contrôleurs ? Devrions-nous continuer à ajouter Front.omeController ? Bien sûr que non. Vous pouvez également transmettre un espace de noms comme l'un des paramètres.
Route::group([ 'name' => 'front.', 'prefix' => 'front', 'namespace' => 'Front', ], function () { Route::get('about-us', 'AboutController@index')->name('about'); Route::get('contact', 'ContactController@index')->name('contact'); });
4. Groupe groupe imbriqué
La situation ci-dessus est divisée en 3 groupes. En fait, cela est simplifié. La structure du projet réel est légèrement différente. – il y a deux groupes : front et auth. Ensuite, dans auth, il y a deux sous-groupes : user et admin. Pour ce faire, nous pouvons créer des sous-groupes dans routes/web.php et attribuer différents middlewares/préfixes, etc.
Route::group([ 'middleware' => 'auth', ], function() { Route::group([ 'name' => 'admin.', 'prefix' => 'admin', 'middleware' => 'admin' ], function () { // URL: /admin/users // Route name: admin.users Route::get('users', 'UserController@index')->name('users'); }); Route::group([ 'name' => 'user.', 'prefix' => 'user', ], function () { // URL: /user/profile // Route name: user.profile Route::get('profile', 'ProfileController@index')->name('profile'); }); });
Nous pouvons même avoir plusieurs niveaux d'imbrication, ce qui est un exemple de projet open source. Akaunting :
Route::group(['middleware' => 'language'], function () { Route::group(['middleware' => 'auth'], function () { Route::group(['prefix' => 'uploads'], function () { Route::get('{id}', 'Common.ploads@get'); Route::get('{id}/show', 'Common.ploads@show'); Route::get('{id}/download', 'Common.ploads@download'); }); Route::group(['middleware' => 'permission:read-admin-panel'], function () { Route::group(['prefix' => 'wizard'], function () { Route::get('/', 'Wizard.ompanies@edit')->name('wizard.index'); // ...
Un autre exemple vient d'un autre CRM Laravel populaire appelé Monica :
Route::middleware(['auth', 'verified', 'mfa'])->group(function () { Route::name('dashboard.')->group(function () { Route::get('/dashboard', 'DashboardController@index')->name('index'); Route::get('/dashboard/calls', 'DashboardController@calls'); Route::get('/dashboard/notes', 'DashboardController@notes'); Route::get('/dashboard/debts', 'DashboardController@debts'); Route::get('/dashboard/tasks', 'DashboardController@tasks'); Route::post('/dashboard/setTab', 'DashboardController@setTab'); });
5 Paramètres globaux dans RouteServiceProvider
Il existe un fichier qui. sert tous les paramètres de route – app/Providers/RouteServiceProvider.php. Il a une méthode map() qui lie deux fichiers de route – web et API :
public function map() { $this->mapApiRoutes(); $this->mapWebRoutes(); } protected function mapWebRoutes() { Route::middleware('web') ->namespace($this->namespace) ->group(base_path('routes/web.php')); } protected function mapApiRoutes() { Route::prefix('api') ->middleware('api') ->namespace($this->namespace) ->group(base_path('routes/api.php')); }
Avez-vous remarqué cela dans la méthode Et le middleware, l'espace de noms et le préfixe ? C'est ici que vous pouvez définir des configurations globales pour l'ensemble du fichier, afin de ne pas avoir à répéter ces paramètres pour chaque groupe de routage du fichier.
Il est principalement utilisé pour les routes API car leurs paramètres sont généralement les mêmes que ceux indiqués ci-dessous :
protected function mapApiRoutes() { Route::group([ 'middleware' => ['api'], 'namespace' => $this->namespace, 'prefix' => 'api/v1', ], function ($router) { require base_path('routes/api.php'); }); }
La méthode ci-dessus préfixera toutes les URL d'API avec api/v1/ au début.
6. Regrouper en plusieurs fichiers – est-ce que ça vaut le coup ?
Si vous disposez d'un grand nombre de routes et souhaitez les regrouper dans des fichiers séparés, vous pouvez utiliser le même fichier mentionné dans la section précédente – app/Providers/RouteServiceProvider.php. Si vous regardez attentivement sa méthode map(), vous verrez la position du commentaire à la fin :
public function map() { $this->mapApiRoutes(); $this->mapWebRoutes(); // }
Vous pouvez interpréter cela comme une "invitation" à ajouter plus de fichiers si vous le souhaitez. Vous pouvez donc créer une autre méthode dans ce fichier comme mapAdminRoutes() puis l'ajouter à la méthode map() et votre fichier sera automatiquement enregistré et chargé.
Personnellement, cependant, je ne vois aucun avantage à cette approche, et je ne la vois pas faire très souvent. Cela entraînerait une plus grande séparation des routages, mais parfois vous pouvez vous perdre dans ces fichiers et ne pas savoir où chercher un itinéraire spécifique.
7. Recherchez un itinéraire spécifique à l'aide de la commande Artisan route:list
En parlant d'itinéraires plus larges et de vous y perdre, nous avons une commande Artisan qui peut aider à localiser un certain itinéraire. .
Vous savez probablement que php artisan route:list affichera toutes les routes de votre projet
Mais vous savez qu'il existe davantage de fonctionnalités de filtrage pour trouver ce que vous Tu veux quelque chose ? Ajoutez simplement –method, ou –name, ou –path avec des arguments.
Filtrer par méthode – GET, POST etc :
Filtrer par nom ou partie d'URL :
Tutoriel recommandé : "Laravel"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Laravelelognent Model Retrieval: Faconttement l'obtention de données de base de données Eloquentorm fournit un moyen concis et facile à comprendre pour faire fonctionner la base de données. Cet article présentera en détail diverses techniques de recherche de modèles éloquentes pour vous aider à obtenir efficacement les données de la base de données. 1. Obtenez tous les enregistrements. Utilisez la méthode All () pour obtenir tous les enregistrements dans la table de base de données: usApp \ Modèles \ Post; $ poters = post :: all (); Cela rendra une collection. Vous pouvez accéder aux données à l'aide de Foreach Loop ou d'autres méthodes de collecte: ForEach ($ PostsAs $ POST) {echo $ post->

L'avenir de PHP sera réalisé en s'adaptant aux nouvelles tendances technologiques et en introduisant des fonctionnalités innovantes: 1) s'adapter aux architectures de cloud computing, de conteneurisation et de microservice, en prenant en charge Docker et Kubernetes; 2) introduire des compilateurs JIT et des types d'énumération pour améliorer l'efficacité des performances et du traitement des données; 3) Optimiser en continu les performances et promouvoir les meilleures pratiques.

Traiter efficacement 7 millions d'enregistrements et créer des cartes interactives avec la technologie géospatiale. Cet article explore comment traiter efficacement plus de 7 millions d'enregistrements en utilisant Laravel et MySQL et les convertir en visualisations de cartes interactives. Exigences initiales du projet de défi: extraire des informations précieuses en utilisant 7 millions d'enregistrements dans la base de données MySQL. Beaucoup de gens considèrent d'abord les langages de programmation, mais ignorent la base de données elle-même: peut-il répondre aux besoins? La migration des données ou l'ajustement structurel est-il requis? MySQL peut-il résister à une charge de données aussi importante? Analyse préliminaire: les filtres et les propriétés clés doivent être identifiés. Après analyse, il a été constaté que seuls quelques attributs étaient liés à la solution. Nous avons vérifié la faisabilité du filtre et établi certaines restrictions pour optimiser la recherche. Recherche de cartes basée sur la ville

PHP et Python ont chacun leurs propres avantages, et le choix doit être basé sur les exigences du projet. 1.Php convient au développement Web, avec une syntaxe simple et une efficacité d'exécution élevée. 2. Python convient à la science des données et à l'apprentissage automatique, avec une syntaxe concise et des bibliothèques riches.

PHP et Python ont chacun leurs propres avantages et choisissent en fonction des exigences du projet. 1.Php convient au développement Web, en particulier pour le développement rapide et la maintenance des sites Web. 2. Python convient à la science des données, à l'apprentissage automatique et à l'intelligence artificielle, avec syntaxe concise et adaptée aux débutants.

Le PHP reste important dans le développement Web moderne, en particulier dans la gestion de contenu et les plateformes de commerce électronique. 1) PHP a un écosystème riche et un fort soutien-cadre, tels que Laravel et Symfony. 2) L'optimisation des performances peut être obtenue via Opcache et Nginx. 3) PHP8.0 introduit le compilateur JIT pour améliorer les performances. 4) Les applications natives dans le cloud sont déployées via Docker et Kubernetes pour améliorer la flexibilité et l'évolutivité.

Comment Laravel joue-t-il un rôle dans la logique backend? Il simplifie et améliore le développement backend par le biais de systèmes de routage, d'éloquente, d'authentification et d'autorisation, d'événements et d'auditeurs et d'optimisation des performances. 1. Le système de routage permet la définition de la structure d'URL et demande la logique de traitement. 2.Lao-éloquente simplifie l'interaction de la base de données. 3. Le système d'authentification et d'autorisation est pratique pour la gestion des utilisateurs. 4. L'événement et l'écoute implémentent la structure de code couplée de manière lâche. 5. L'optimisation des performances améliore l'efficacité de l'application par la mise en cache et la file d'attente.

Les raisons pour lesquelles PHP est la pile technologique préférée pour de nombreux sites Web incluent sa facilité d'utilisation, son soutien communautaire solide et son utilisation généralisée. 1) Facile à apprendre et à utiliser, adapté aux débutants. 2) Avoir une énorme communauté de développeurs et des ressources riches. 3) Largement utilisé dans WordPress, Drupal et d'autres plateformes. 4) Intégrez étroitement aux serveurs Web pour simplifier le déploiement du développement.
