La structure de répertoire
La structure par défaut d'une application Laravel est conçue pour offrir un excellent point de départ, aussi bien pour les petites que pour les grandes applications. Vous êtes toutefois libre d'organiser votre application comme vous le souhaitez. Laravel n'impose quasiment aucune restriction quant à l'emplacement des classes, pourvu que Composer puisse les charger automatiquement.
Répertoire Root
Répertoire App
Le répertoire de l'application contient le code principal de votre application. Nous l'explorerons plus en détail plus bas; toutefois, la quasi-totalité des classes de votre application s'y trouvera.
Le répertoire Bootstrap
Le répertoire Bootstrap contient le fichier app.php initialisant le cadre d'application. Ce répertoire héberge également un répertoire cache contenant les fichiers générés par le cadre d'application pour l'optimisation des performances, tels que les fichiers de cache des routes et des services.
Le répertoire Config
Comme son nom l'indique, le répertoire config contient tous les fichiers de configuration de votre application. Il est fortement conseillé de parcourir ces fichiers et de vous familiariser avec toutes les options disponibles.
Répertoire Database
Le répertoire database contient vos migrations, vos fabriques de modèles et vos initialisations. Vous pouvez également y héberger une base de données SQLite si vous le souhaitez.
Le répertoire Public
Le répertoire public contient le fichier index.php, point d'entrée de toutes les requêtes adressées à votre application et configurant le chargement automatique. Ce répertoire héberge également vos ressources telles que les images, les fichiers JavaScript et CSS.
Le répertoire Resources
Le répertoire resources contient vos vues ainsi que vos ressources brutes non compilées, telles que les fichiers CSS ou JavaScript.
Le répertoire Routes
Le répertoire des routes contient toutes les définitions de routes de votre application. Par défaut, Laravel inclut deux fichiers de routes : web.php et console.php.
Le fichier web.php contient les routes que Laravel place dans le groupe middleware web, gérant l'état de session, la protection CSRF et le chiffrement des cookies. Si votre application ne propose pas d'API RESTful sans état, toutes vos routes seront probablement définies dans le fichier web.php.
Le fichier console.php vous permet de définir toutes vos commandes de console basées sur des closures. Chaque closure est liée à une instance de commande, ce qui simplifie l'interaction avec les méthodes d'entrée/sortie de chaque commande. Bien que ce fichier ne définisse pas les routes HTTP, il définit les points d'entrée (routes) de votre application via la console. Vous pouvez également planifier des tâches dans le fichier console.php.
Vous pouvez installer, en option, des fichiers de routes supplémentaires pour les routes API (api.php) et les canaux de diffusion (channels.php) à l'aide des commandes Artisan install:api et install:broadcasting.
Le fichier api.php contient des routes conçues pour être sans état. Les requêtes entrant dans l'application via ces routes doivent être authentifiées par jetons et n'auront pas accès à l'état de session.
Le fichier channels.php vous permet d'enregistrer tous les canaux de diffusion d'événements pris en charge par votre application.
Répertoire Storage
Le répertoire storage contient vos journaux, les modèles Blade compilés, les sessions basées sur des fichiers, les caches de fichiers et autres fichiers générés par le cadre d'application. Ce répertoire est divisé en trois sous-répertoires : app, framework et logs. Le répertoire app peut servir à entreposer tous les fichiers générés par votre application. Le répertoire framework est utilisé pour entreposer les fichiers et caches générés par le cadre d'application. Enfin, le répertoire logs contient les fichiers journaux de votre application.
Le répertoire storage/app/public peut être utilisé pour entreposer les fichiers générés par les utilisateurs, tels que les avatars de profil, devant être accessibles publiquement. Vous devez créer un lien symbolique dans public/storage pointant vers ce répertoire. Vous pouvez créer ce lien à l'aide de la commande Artisan php artisan storage:link.
Répertoire Tests
Le répertoire tests contient vos tests automatisés. Des exemples de tests unitaires et fonctionnels Pest ou PHPUnit sont fournis par défaut. Chaque classe de test doit se terminer par le mot «Test». Vous pouvez exécuter vos tests avec les commandes `/vendor/bin/pest` ou `/vendor/bin/phpunit`. Pour une représentation plus détaillée et esthétique des résultats, vous pouvez également exécuter vos tests avec la commande Artisan `php artisan test`.
Répertoire Vendor
Le répertoire vendor contient vos dépendances Composer.
Le répertoire App
La majeure partie de votre application se trouve dans le répertoire app. Par défaut, ce répertoire est placé dans l'espace de noms App et est chargé automatiquement par Composer conformément à la norme de chargement automatique PSR-4.
Par défaut, le répertoire app contient les répertoires Http, Models et Providers. Cependant, au fil du temps, d'autres répertoires seront créés dans `app` lorsque vous utiliserez les commandes Artisan `make` pour générer des classes. Par exemple, le répertoire `app/Console` n'existera pas tant que vous n'aurez pas exécuté la commande Artisan `make:command` pour générer une classe de commande.
Les répertoires `Console` et `Http` sont expliqués plus en détail dans leurs sections respectives ci-dessous. Considérez-les comme une API permettant d'accéder au coeur de votre application. Le protocole HTTP et l'interface de ligne de commande (CLI) sont deux mécanismes d'interaction avec votre application, mais ils ne contiennent pas la logique applicative. Autrement dit, ce sont deux manières d'envoyer des commandes à votre application. Le répertoire `Console` contient toutes vos commandes Artisan, tandis que le répertoire `Http` contient vos contrôleurs, vos intergiciels et vos requêtes.
De nombreuses classes du répertoire de l'application peuvent être générées par Artisan via des commandes. Pour consulter la liste des commandes disponibles, exécutez la commande `php artisan list make` dans votre terminal.
Répertoire Broadcasting
Le répertoire Broadcasting contient toutes les classes des canaux de diffusion de votre application. Ces classes sont générées à l'aide de la commande make:channel. Ce répertoire n'existe pas par défaut, mais il sera créé automatiquement lors de la création de votre premier canal.
Répertoire Console
Le répertoire Console contient toutes les commandes Artisan personnalisées de votre application. Ces commandes peuvent être générées à l'aide de la commande make:command.
Répertoire Events
Ce répertoire n'existe pas par défaut, mais il sera créé automatiquement par les commandes Artisan event:generate et make:event. Le répertoire Events contient les classes d'événements. Les événements permettent d'informer d'autres parties de votre application qu'une action donnée a eu lieu, offrant ainsi une grande flexibilité et un découplage efficace.
Répertoire Exceptions
Le répertoire Exceptions contient toutes les exceptions personnalisées de votre application. Ces exceptions peuvent être générées à l'aide de la commande make:exception.
Le répertoire HTTP
Le répertoire HTTP contient vos contrôleurs, vos intergiciels et vos requêtes de formulaire. La quasi-totalité de la logique de traitement des requêtes entrantes dans votre application se trouve dans ce répertoire.
Répertoire Jobs
Ce répertoire n'existe pas par défaut, mais il sera créé si vous exécutez la commande Artisan make:job. Le répertoire des tâches contient les tâches pouvant être mises en file d'attente pour votre application. Ces tâches peuvent être mises en file d'attente par votre application ou s'exécuter de manière synchrone au cours du cycle de vie de la requête en cours. Les tâches exécutées de manière synchrone pendant la requête en cours sont parfois appelées «commands», car elles implémentent le modèle de conception de commande.
Répertoire Listeners
Ce répertoire n'existe pas par défaut, mais il sera créé si vous exécutez les commandes Artisan `event:generate` ou `make:listener`. Le répertoire des écouteurs contient les classes gérant vos événements. Les écouteurs d'événements reçoivent une instance d'événement et exécutent une logique en réponse à son déclenchement. Par exemple, un événement `UserRegistered` peut être géré par un écouteur `SendWelcomeEmail`.
Répertoire Mail
Ce répertoire n'existe pas par défaut, mais il sera créé si vous exécutez la commande Artisan make:mail. Le répertoire Mail contient toutes les classes représentant les courriels envoyés par votre application. Les objets Mail vous permettent d'encapsuler toute la logique de construction d'un courriel dans une seule classe simple, pouvant être envoyée à l'aide de la méthode `Mail::send`.
Répertoire Models
Le répertoire des modèles contient toutes vos classes de modèles Eloquent. L'ORM Eloquent inclus dans Laravel offre une implémentation ActiveRecord simple et élégante pour interagir avec votre base de données. Chaque table de la base de données possède un « modèle » correspondant, utilisé pour interagir avec cette table. Les modèles vous permettent d'interroger vos tables et d'y insérer de nouveaux enregistrements.
Répertoire Notifications
Ce répertoire n'existe pas par défaut, mais il sera créé si vous exécutez la commande Artisan make:notification. Le répertoire des avertissements contient toutes les avertissements transactionnelles envoyées par votre application, comme les avertissements d'événements internes. Le système de avertissements de Laravel permet d'envoyer des avertissements via différents canaux : courriel, Slack, SMS ou encore via une base de données.
Répertoire Policies
Ce répertoire n'existe pas par défaut, mais il sera créé si vous exécutez la commande Artisan `make:policy`. Le répertoire des politiques contient les classes de politiques d'autorisation de votre application. Les politiques permettent de déterminer si un utilisateur est autorisé à effectuer une action donnée sur une ressource.
Répertoire Providers
Le répertoire Providers contient tous les fournisseurs de services de votre application. Ces fournisseurs initialisent votre application en liant les services dans le conteneur de services, en enregistrant les événements ou en effectuant toute autre tâche nécessaire pour préparer votre application aux requêtes entrantes.
Dans une application Laravel nouvellement installée, ce répertoire contient déjà le fournisseur AppServiceProvider. Vous pouvez y ajouter vos propres fournisseurs selon vos besoins.
Répertoire Rules
Ce répertoire n'existe pas par défaut, mais il sera créé si vous exécutez la commande Artisan make:rule. Le répertoire des règles contient les objets de règles de validation personnalisées de votre application. Les règles permettent d'encapsuler une logique de validation complexe dans un objet simple.