Explications sur les fichiers et les dossiers de Laravel

Article mis à jour il y a 6 mois pour Laravel 5.7

Nous venons d'installer PHP et notre premier projet Laravel. Si vous êtes curieux et que vous avez ouvert le dossier créé par Composer, de nombreux dossiers et fichiers ont été ajoutés. Heureusement, il n'est pas nécessaire de connaître tous les dossiers et tous les fichiers pour commencer à travailler avec Laravel.

Ce tutoriel va décrire brièvement l'utilité de chacun de ces dossiers et fichiers afin d'avoir une vue d'ensemble du framework.

Les dossiers

app

Le dossier app est le dossier le plus important de votre projet. C'est celui qui contiendra votre application, c'est à dire, tout votre code PHP (fonctions, classes…).

bootstrap

Le dossier bootstrap n'est pas utile. Il contient principalement des fichiers liés au lancement du framework ainsi qu'un dossier cache pour certaines optimisations.

config

Le dossier config permet la configuration du framework. À l'intérieur, chaque fichier correspond à une fonctionnalité configurable. Par exemple, le fichier config/database.php contient un tableau PHP avec différentes valeurs de configuration pour l'URL de la base de données, l'utilisateur, le mot de passe…

Nous verrons, lorsque nous en aurons besoin, comment modifier ces fichiers.

database

Le dossier database permet la gestion de la base données.

Le principal sous-dossier est le sous-dossier migrations. Les migrations sont des fichiers permettant de décrire votre base de données afin de permettre à Laravel de créer, modifier ou supprimer les tables et les colones automatiquement pour vous. Si vous avez déjà utilisé PHPMyAdmin, les migrations remplacent une partie l'utilisation de PHPMyAdmin.

Les sous-dossiers seeds et factories ne sont pas utiles pour le moment.

public

Le dossier public contient tous les fichiers accessibles directement par vos visiteurs.

Par exemple, si vous avez des images publiques sur votre site, elles doivent être dans le dossier public (ou dans un sous-dossier du dossier public). Même chose pour vos fichiers CSS et JavaScript.

Laravel fournit de base quelques fichiers utiles comme un favicon, un fichier robots.txt…

Le fichier index.php est la porte d'entrée de votre application. C'est le seul fichier PHP accessible de l'extérieur et il sera responsable de lancer le framework et d'appeler votre code situé dans le dossier app. Vous n'aurez jamais à modifier ce fichier directement car, comme dit précédemment, notre code PHP se trouve dans le dossier app.

resources

Le dossier resources contient de nombreuses choses diverses. Principalement pour les autres fichiers de notre application qui ne sont pas du code PHP.

Le dossier resources/js et resources/sass contient des fichiers pré-CSS et pré-JS avant leur compilation. Si vous n'avez jamais compilé de fichier SASS, ni utilisé Babel, Webpack ou autre pour compiler votre JavaScript, passez votre chemin. Nous aurons tout le temps d'étudier ces concepts par la suite.

Le dossier resources/lang contient les fichiers de traduction pour votre application. Ils ne vous seront utiles que si vous souhaitez créer un site multi-lingue.

Le dossier resources/views contient les vues de votre application. Les vues sont des fichiers majoritairement composés de HTML et sont chargés de la partie affichage de votre site. C'est l'un des dossiers les plus importants après le dossier app.

routes

Si vous avez l'habitude d'une architecture PHP simple : https://mon-site.com/contact.php exécute le code situé dans contact.php et https://mon-site.com/compte.php exécute compte.php. Dans une architecture MVC comme celle de Laravel, toutes les requêtes des utilisateurs arrivent via le fichier public/index.php il est donc nécessaire de faire le lien entre l'URL entrée par le visiteur (« /contact », « /mon-compte »…) et le code qui sera exécuté. C'est dans le fichier routes/web.php que vous allez configurer ce lien. Nous verrons justement ça dans le prochain chapitre.

Si vous souhaitez développer une API, le fichier routes/api.php sera l'endroit où mettre vos liens. Si vous souhaitez mettre en place des actions en ligne de commande pour votre application, ce sera le fichier routes/console.php. Et si vous souhaitez envoyer des messages avec des websockets à vos visiteurs, ce sera le fichier routes/channel.php. Mais ces trois fichiers ne sont pas indispensable contrairement au fichier routes/web.php.

storage

Le dossier storage/app contient tous les fichiers générés par votre application, par exemple des factures PDF, les photos de profil de vos utilisateurs, etc.

Le dossier storage/framework contient des fichiers utilisés uniquement par le framework. Il est recommandé de ne pas ajouter ou supprimer de fichiers à ce dossier.

Enfin, le dossier storage/logs contient les fichiers de logs de votre application. Les fichiers de logs contiennent des informations sur l'activité de votre application. Par défaut, Laravel enregistrera dans un fichier storage/logs/laravel-YYYY-MM-DD.log tous les problèmes rencontrés par votre application : très utile pour comprendre pourquoi votre site ne fonctionne pas par exemple.

tests

Les tests sont un moyen rapide et automatisé de vérifier que votre application fonctionne comme vous le souhaitez. Si votre application commence à grossir, il est important de comprendre comment fonctionne les tests en programmation.

Les tests sont un sujet complexe, si vous connaissez déjà la programmation vous pouvez regarder mes vidéos Développement Laravel et E-Commerce avec Laravel où je présente comment réaliser une application avec des tests.

vendor

Le dossier vendor contient toutes les dépendances PHP téléchargées par Composer. Vous pouvez par exemple retrouver dans vendor/laravel/framework le code source de Laravel. Vous ne devez jamais changer les fichiers de ce dossier, car ces modifications seront écrasées par Composer à la prochaine mise à jour.

Les fichiers

À la racine de notre projet, Composer a également ajouté de nombreux fichiers. La plupart sont des fichiers de configuration pour des outils externes (Git, Composer, NPM, PHPUnit…) et nous ne les utiliserons pas avant d'avoir découvert ces outils.

.env

Les fichiers .env contient les mots de passe de vos services ainsi que toutes les données sensibles de votre application (mot de passe de base de données, adresse de la base de données…). Ce fichier ne doit jamais être partagé. Afin de connaître les informations à renseigner, il existe un fichier .env.example qui contient uniquement des valeurs d'exemple.

.gitattributes et .gitignore

Ces fichiers sont utilisés par le logiciel Git. Si vous n'utilisez pas Git, vous n'avez pas à vous en occuper.

artisan

Le fichier artisan permet de lancer des commandes comme php artisan serve. Ces commandes vont nous permettre de faire beaucoup de choses avec Laravel et nous verrons au fur et à mesure des tutoriels les différentes commandes existantes.

composer.json et composer.lock

Le fichier composer.json contient toutes les dépendances requises par notre application. Le fichier composer.lock est un fichier généré automatiquement par Composer lors de la commande composer update. Vous ne devez jamais le modifier manuellement.

webpack.mix.js

Webpack est un outil permettant de transformer des fichiers SASS en fichier CSS ou encore de compiler du JavaScript. Si vous ne savez pas ce que cela signifie, il n'est pas nécessaire de s'en occuper pour le moment.

packages.json et yarn.lock

Le fichier packages.json est identique au fichier composer.json en PHP mais pour le JavaScript avec l'outil NPM. Nous ne l'utiliserons pas pour le moment.

phpunit.xml

PHPUnit est un outil qui permet de lancer les tests unitaires et fonctionnels. Ce fichier sera utile lorsque vous utilisez des tests dans le dossire tests.

server.php

Le fichier server.php est uniquement présent pour que la commande php artisan serve fonctionne. Vous ne devriez jamais avoir à y toucher.

Inscrivez-vous à la newsletter pour recevoir chaque semaine un condensé d'informations sur Laravel : nouveautés du framework, vidéos explicatives, tutoriels et bien plus encore !

Toujours pas convaincu ? Lisez les précédentes éditions !