Maison cadre php Laravel Comment organiser votre routage dans un grand projet Laravel

Comment organiser votre routage dans un grand projet Laravel

May 07, 2020 am 10:13 AM
laravel php 路由

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 :

Comment organiser votre routage dans un grand projet Laravel

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 中间件
    });
});
Copier après la connexion

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');
});
Copier après la connexion

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 () {
    // ...
});
Copier après la connexion

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');
});
Copier après la connexion

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 :

Comment organiser votre routage dans un grand projet Laravel

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');
});
Copier après la connexion

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');
});
Copier après la connexion

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');
    });
});
Copier après la connexion

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');
        // ...
Copier après la connexion

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');
    });
Copier après la connexion

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'));
    }
Copier après la connexion

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');
    });
}
Copier après la connexion

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();
    //
}
Copier après la connexion

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

Comment organiser votre routage dans un grand projet Laravel

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 :

Comment organiser votre routage dans un grand projet Laravel

Filtrer par nom ou partie d'URL :

Comment organiser votre routage dans un grand projet Laravel

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Laravel Eloquent Orm dans Bangla Partial Model Search) Laravel Eloquent Orm dans Bangla Partial Model Search) Apr 08, 2025 pm 02:06 PM

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: adaptations et innovations L'avenir de PHP: adaptations et innovations Apr 11, 2025 am 12:01 AM

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.

Géospatial de Laravel: optimisation des cartes interactives et de grandes quantités de données Géospatial de Laravel: optimisation des cartes interactives et de grandes quantités de données Apr 08, 2025 pm 12:24 PM

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 vs Python: comprendre les différences PHP vs Python: comprendre les différences Apr 11, 2025 am 12:15 AM

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: comparaison de deux langages de programmation populaires PHP et Python: comparaison de deux langages de programmation populaires Apr 14, 2025 am 12:13 AM

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.

Statut actuel de PHP: un regard sur les tendances de développement Web Statut actuel de PHP: un regard sur les tendances de développement Web Apr 13, 2025 am 12:20 AM

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

Laravel et le backend: alimentation logique d'application Web Laravel et le backend: alimentation logique d'application Web Apr 11, 2025 am 11:29 AM

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.

PHP: la fondation de nombreux sites Web PHP: la fondation de nombreux sites Web Apr 13, 2025 am 12:07 AM

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.

See all articles