Logomark

LARAVEL

Un framework qui rend heureux
Voir cette catégorie
Vers le bas
Voir cette série
Cours Laravel 12 – les bases – installation et organisation
Mercredi 26 février 2025 14:51

Dans ce chapitre, nous allons explorer comment créer une application Laravel et comprendre l'organisation du code au sein de cette application. Laravel est un framework PHP puissant et élégant, conçu pour simplifier le développement web en offrant une structure claire et des outils robustes.

Créer une application Laravel

Prérequis

Pour utiliser Laravel et suivre ce chapitre ainsi que l'ensemble du cours, vous aurez besoin des éléments suivants :

  1. Serveur PHP : assurez-vous que votre serveur est équipé de PHP avec au minimum la version 8.2. Laravel nécessite une version récente de PHP pour fonctionner correctement.

  2. Base de données MySQL ou SQLite : MySQL est le système de gestion de base de données le plus couramment utilisé avec Laravel. Assurez-vous que votre serveur MySQL est installé et configuré.

  3. Extensions PHP : plusieurs extensions PHP doivent être activées pour que Laravel fonctionne correctement. Voici une liste des extensions couramment requises :

    • OpenSSL : pour les opérations de cryptage et de décryptage.
    • PDO : pour l'accès aux bases de données.
    • Mbstring : pour la manipulation des chaînes de caractères multioctets.
    • Tokenizer : pour l'analyse syntaxique des fichiers PHP.
    • XML : pour la manipulation des fichiers XML.
    • Ctype : pour les fonctions de manipulation de caractères.
    • JSON : pour la manipulation des données JSON.
    • BCMath : pour les opérations mathématiques de haute précision.

Laravel est équipé d’un serveur sommaire pour le développement qui se lance avec cette commande :

php artisan serve

On y accède à cette adresse : http://localhost:8000. Mais évidemment pour que ça fonctionne il faut que vous ayez PHP installé.

Attention à votre version de PHP, si vous n'avez pas au minum la 8.2 Laravel 12 ne s'installera pas !

Composer

Composer fonctionne en ligne de commande. Vous avez donc besoin de la console (nommée Terminal ou Konsole sur OS X et Linux). Les utilisateurs de Linux sont très certainement habitués à l’utilisation de la console mais il en est généralement pas de même pour les adeptes de Windows. Pour trouver la console sur ce système il faut chercher l’invite de commande :

Si vous utilisez Laragon, comme je vous le conseille, vous avez une console améliorée (Cmder) accessible avec ce bouton.

Si vous utilisez Visual Studio Code vous pouvez ouvrir directement un terminal (et même plusieurs) directement dans une fenêtre de l'éditeur :

Installation avec composer

Il y a plusieurs façons de créer une application Laravel. La plus classique consiste à utiliser la commande create-project de composer. Par exemple je veux créer une application dans un dossier laravel12 à la racine de mon serveur, voici la syntaxe à utiliser :

composer create-project --prefer-dist laravel/laravel laravel12

L'installation démarre et je n’ai plus qu’à attendre quelques minutes pour que Composer fasse son travail jusqu’au bout. Vous verrez s’afficher une liste de téléchargements. Au final on se retrouve avec cette architecture :

On peux vérifier que tout fonctionne bien avec l’URL http://localhost/laravel12/public. Normalement on doit obtenir cette page :

Pour les mises à jour ultérieures il suffit encore d’utiliser Composer avec la commande update :

composer update

Installation avec Laravel Installer

Une autre solution pour installer Laravel consiste à utiliser l’installeur. Il faut commencer par installer globalement l’installeur avec Composer :

composer global require laravel/installer

Ensuite, pour créer une application il suffit de taper :

laravel new laravel12

L'avantage de l'utilisation de Laravel Installer c'est qu'on va nous proposer pas mal d'options. D'abord le starter kit qu'on veut utiliser :

 Which starter kit would you like to install? [None]:
  [none    ] None                                    
  [react   ] React                                   
  [vue     ] Vue                                     
  [livewire] Livewire                                

Ces kits de démarrage vous offrent un point de départ pour construire votre application Laravel. Ils incluent les routes, contrôleurs et vues nécessaires pour enregistrer et authentifier les utilisateurs de votre application. En d'autres termes, ils vous fournissent une base solide pour gérer l'inscription et la connexion des utilisateurs, vous permettant ainsi de vous concentrer sur le développement des fonctionnalités spécifiques à votre projet sans avoir à repartir de zéro pour ces aspects essentiels. Pour le moment on n'en utilisera pas.

Ensuite on nous demande quel système de base de données on veut utiliser :

 Which database will your application use? [SQLite]:
  [sqlite ] SQLite                                  
  [mysql  ] MySQL                                   
  [mariadb] MariaDB                                 
  [pgsql  ] PostgreSQL (Missing PDO extension)      
  [sqlsrv ] SQL Server (Missing PDO extension) 

Vous avez entièrement le choix parce que Laravel sait gérer toutes ces possibilités.

Si vous ne connaissez pas trop les avantages et inconvénients relatifs de tous ces systèmes voici un petit récapiltulatif :

  1. SQLite :

    • Avantages :
      • Simplicité : SQLite est facile à configurer et à utiliser, car il ne nécessite pas de serveur de base de données séparé.
      • Léger : idéal pour les petites applications ou les projets de développement en raison de sa faible empreinte mémoire.
      • Portabilité : la base de données est contenue dans un seul fichier, ce qui facilite le déplacement et le partage.
    • Inconvénients :
      • Performance : moins performant que les autres options pour les applications à fort trafic ou nécessitant des transactions complexes.
      • Concurrence : peut rencontrer des limitations en termes de gestion de la concurrence d'accès.
  2. MySQL :

    • Avantages :
      • Popularité : très répandu et bien supporté par de nombreux hébergeurs.
      • Performance : bonne performance pour la plupart des applications web.
      • Communauté : grande communauté et beaucoup de ressources disponibles.
    • Inconvénients :
      • Licence : bien que la version communautaire soit gratuite, certaines fonctionnalités avancées peuvent nécessiter une licence commerciale.
      • Complexité : peut nécessiter plus de configuration et de maintenance par rapport à SQLite.
  3. MariaDB :

    • Avantages :
      • Compatibilité : hautement compatible avec MySQL, ce qui facilite la migration.
      • Performance : souvent considéré comme ayant de meilleures performances que MySQL pour certaines charges de travail.
      • Open Source : entièrement open source, sans fonctionnalités payantes.
    • Inconvénients :
      • Moins répandu : moins d'hébergeurs le supportent par défaut par rapport à MySQL.
      • Écosystème : bien que croissant, l'écosystème est encore plus petit que celui de MySQL.
  4. PostgreSQL :

    • Avantages :
      • Fonctionnalités avancées : supporte des fonctionnalités avancées comme les transactions ACID, les extensions, et les types de données personnalisés.
      • Extensibilité : bien adapté pour les applications nécessitant une grande extensibilité et des fonctionnalités avancées.
    • Inconvénients :
      • Complexité : peut être plus complexe à configurer et à optimiser.
      • Performance : peut nécessiter plus de ressources pour des performances optimales.
      • Extension PDO manquante : aActuellement, l'extension PDO pour PostgreSQL est manquante, ce qui peut poser des problèmes d'intégration avec certaines applications PHP.
  5. SQL Server :

    • Avantages :
      • Intégration : bonne intégration avec les environnements Windows et les outils Microsoft.
      • Fonctionnalités : offre de nombreuses fonctionnalités avancées pour les entreprises.
    • Inconvénients :
      • Coût : les versions complètes peuvent être coûteuses.
      • Compatibilité : moins couramment utilisé dans les environnements open source.
      • Extension PDO manquante : comme pour PostgreSQL, l'extension PDO pour SQL Server est manquante, ce qui peut limiter son utilisation avec certaines applications PHP.

Le choix de la base de données dépendra de vos besoins spécifiques en termes de performance, de fonctionnalités, de coût, et de compatibilité avec votre environnement de développement.

Pour terminer, Laravel Installer nous demande si on veut générer les assets :

Would you like to run npm install and npm run build? (yes/no) [yes]:

Et votre Laravel est installé complètement !

Installation avec Laragon

Une façon encore plus simple pour installer Laravel est d’utiliser Laragon avec le menu : 

On vous demande alors le nom du projet (donc du dossier) :

 

Et ensuite vous n’avez plus qu’à attendre ! La console s’ouvre et vous pouvez suivre le déroulement des opérations. On vous rappelle la commande de composer et en plus une base de données et automatiquement créée avec le même nom !

Vous avez alors accès directement à l'application avec laravel12.oo.

Autorisations

Au niveau des dossiers de Laravel, les seuls qui ont besoin de droits d’écriture par le serveur sont storage (et ses sous-dossiers), et bootstrap/cache.

Des URL propres

Pour un serveur Apache il est prévu dans le dossier public un fichier .htaccess avec ce code :

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Handle X-XSRF-Token Header
    RewriteCond %{HTTP:x-xsrf-token} .
    RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Send Requests To Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Si tout ça vous semble un peu nébuleux ce n'est pas grave, vous n'aurez pas à modifier ce fichier, pour les curieux voici quelques explication :

  1. <IfModule mod_rewrite.c> :

    • Cette directive vérifie si le module mod_rewrite est activé sur le serveur Apache. Si c'est le cas, les règles de réécriture d'URL à l'intérieur de cette section seront appliquées.
  2. <IfModule mod_negotiation.c> :

    • Vérifie si le module mod_negotiation est activé. Ce module est souvent utilisé pour la négociation de contenu, mais ici, il est désactivé pour éviter des conflits avec les règles de réécriture.
  3. Options -MultiViews -Indexes :

    • -MultiViews : Désactive la fonctionnalité MultiViews, qui permettrait au serveur de retourner automatiquement des fichiers basés sur des extensions ou des variantes de noms de fichiers.
    • -Indexes : Désactive l'affichage automatique des listes de répertoires si aucun fichier d'index (comme index.php) n'est trouvé.
  4. RewriteEngine On :

    • Active le moteur de réécriture d'URL.
  5. Gestion des en-têtes HTTP :

    • RewriteCond %{HTTP:Authorization} . et RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] :
      • Si l'en-tête Authorization est présent dans la requête, il est capturé et stocké dans une variable d'environnement HTTP_AUTHORIZATION.
    • RewriteCond %{HTTP:x-xsrf-token} . et RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}] :
      • De même, si l'en-tête X-XSRF-Token est présent, il est capturé et stocké dans HTTP_X_XSRF_TOKEN.
  6. Redirection des slashes finaux :

    • RewriteCond %{REQUEST_FILENAME} !-d et RewriteCond %{REQUEST_URI} (.+)/$ :
      • Si la requête ne pointe pas vers un répertoire existant et se termine par un slash, la règle suivante est appliquée.
    • RewriteRule ^ %1 [L,R=301] :
      • Redirige l'URL en supprimant le slash final, avec un statut HTTP 301 (redirection permanente).
  7. Envoi des requêtes au contrôleur frontal :

    • RewriteCond %{REQUEST_FILENAME} !-d et RewriteCond %{REQUEST_FILENAME} !-f :
      • Si la requête ne correspond pas à un répertoire ou un fichier existant, la règle suivante est appliquée.
    • RewriteRule ^ index.php [L] :
      • Envoie toutes les requêtes au fichier index.php, qui sert de contrôleur frontal pour gérer les requêtes dans une application web (par exemple, avec Laravel).

Globalement le but de gérer les URL de manière propre et de centraliser le traitement des requêtes via un point d'entrée unique

Organisation de Laravel

Maintenant qu’on a un Laravel tout neuf et qui fonctionne voyons un peu ce qu’il contient…

Dossier app

Ce dossier contient les éléments essentiels de l’application, mais très épuré au départ :

 

  • Http : tout ce qui concerne la communication : contrôleurs, middlewares (aucun au départ).
  • Providers : tous les fournisseurs de services (providers), il n'y en a qu'un au départ. Les providers servent à initialiser les composants.
  • Models : le dossier des modèles avec déjà un présent qui concerne les utilisateurs (User).

Il faudra ajouter des éléments quand on en aura besoin. Il existe des commandes Artisan pour ça.

Évidemment tout cela doit vous paraître assez nébuleux pour le moment mais nous verrons en détail ces éléments au fil du cours. Et on verra d’ailleurs que seront créés bien d’autres dossiers selon nos besoins.

Autres dossiers

Voici une description du contenu des autres dossiers :

  • bootstrap : scripts d’initialisation de Laravel pour le chargement automatique des classes, la fixation de l’environnement et des chemins, et pour le démarrage de l’application,
  • public : tout ce qui doit apparaître dans le dossier public du site : images, CSS, scripts…
  • config : toutes les configurations : application, authentification, cache, base de données, espaces de noms, emails, systèmes de fichier, session…
  • database : migrations et populations,
  • resources : vues et assets (CSS et Javascript),
  • routes : la gestion des urls d’entrée de l’application,
  • storage : données temporaires de l’application : vues compilées, caches, clés de session…
  • tests : fichiers de tests unitaires,
  • vendor : tous les composants de Laravel et de ses dépendances (créé par composer).

Fichiers de la racine

Il y a un certain nombre de fichiers dans la racine dont voici les principaux :

  • artisan : outil en ligne de Laravel pour des tâches de gestion,
  • composer.json : fichier de référence de composer,
  • package.json : fichier de référence de npm pour les assets,
  • phpunit.xml : fichier de configuration de phpunit (pour les tests unitaires),
  • .env : fichier pour spécifier l’environnement d’exécution.

Nous verrons tout cela progressivement dans le cours, ne vous inquiétez pas !

Accessibilité

Pour des raisons de sécurité sur le serveur seul le dossier public doit être accessible : 

Cette configuration n’est pas toujours possible sur un serveur mutualisé, il faut alors modifier un peu Laravel pour que ça fonctionne.

Environnement et messages d’erreur

Par défaut lorsque vous installez Laravel, celui-ci est en mode « debug » et vous aurez une description précise de toutes les erreurs. Par exemple ouvrez le fichier routes/web.php et changez ainsi le code :

Route::post('/', function () {
    return view('welcome');
});

Ouvrez l'url de base, vous obtenez une page d'erreur avec en particulier cette information :

Pendant la phase de développement on a besoin d’obtenir des messages explicites pour traquer les erreurs inévitables que nous allons faire. En mode « production » il faudra changer ce mode, pour cela ouvrez le fichier config/app.php et trouvez cette ligne :

'debug' => (bool) env('APP_DEBUG', false),

Autrement dit on va chercher la valeur dans l’environnement, mais où peut-on le trouver ? Regardez à la racine des dossiers, vous y trouvez le fichier .env avec en particulier ce paramètre :

APP_DEBUG=true

Le paramètre APP_DEBUG a la valeur true. On va le conserver ainsi puisqu’on veut être en mode « debug ». Vous êtes ainsi en mode débogage avec affichage de messages d’erreur détaillés. Si vous la mettez à false (ou si vous la supprimez), avec une URL non prévue vous obtenez maintenant juste :

Il ne faudra évidemment pas laisser la valeur true lors d’une mise en production ! On en reparlera lorsqu’on verra la gestion de l’environnement. Vous ne risquerez ainsi plus d’oublier de changer cette valeur parce que Laravel saura si vous êtes sur votre serveur de développement ou sur celui de production.

D’autre part il y a un fichier qui collecte les erreurs (Log), il n'existe pas à l'installation mais se crée à la première erreur signalée. Alors on va en créer une. Toujours dans le fichier routes/web.php modifiez ainsi le code :

Route::get('/', function () {
    return view('welcofme');
});

On a changé le nom de la vue, du coup elle n'existe pas (on parlera plus tard des vues évidemment). Maintenant un fichier de Log a été créé ici :

On peut y lire :

[2025-02-26 20:45:19] local.ERROR: View [welcofme] not found. {"exception":"[object] (InvalidArgumentException(code: 0): View [welcofme] not found. at E:\\laragon\\www\\laravel12\\vendor\\laravel\\framework\\src\\Illuminate\\View\\FileViewFinder.php:139)

Par défaut il n’y a qu’un fichier mais si vous préférez avoir un fichier par jour par exemple il suffit d’ajouter cette ligne dans le fichier .env :

LOG_CHANNEL=daily

De la même manière par défaut Laravel stocke toutes les erreurs. C’est pratique dans la phase de développement mais en production vous pouvez limiter le niveau de sévérité des erreurs retenues (mode debug), par exemple si vous vous contentez des warning :

LOG_LEVEL=warning

La valeur de APP_KEY qui sécurise les informations est automatiquement générée lors de l’installation avec create-project.

En résumé

  • Pour son installation et sa mise à jour Laravel utilise le gestionnaire de dépendances composer.
  • La création d’une application Laravel peut se faire de plusieurs manières,
  • Laravel est organisé en plusieurs dossiers.
  • Le dossier public est le seul qui doit être accessible pour le client.
  • L’environnement est fixé à l’aide du fichier .env.
  • Par défaut Laravel est en mode « debug » avec affichage de toutes les erreurs.


Par bestmomo

Aucun commentaire

Article précédent : Cours Laravel 12 – les bases – un environnement de développement
Article suivant : Cours Laravel 12 – les bases – le routage
Cet article contient un quiz. Vous devez être authentifié pour y avoir acces.