Laravel
Bloc Laravel · séance 1 · ~35 min
Laravel est un framework PHP, c'est-à-dire un programme qui organise une application PHP et exécute certaines parties de votre code lorsqu'il reçoit une requête HTTP. Cette requête contient notamment l'adresse demandée par le navigateur. Taylor Otwell, un développeur de l'Arkansas, a créé Laravel en 2011. Quinze ans plus tard, une entreprise et une équipe développent le framework ainsi que des outils gratuits et payants. La version utilisée par un projet détermine les versions de PHP compatibles et les correctifs encore disponibles.
Compétences visées
- situer les grandes dates de Laravel, de la première bêta en 2011 à Laravel 13 en 2026.
- expliquer ce qui distingue Laravel d'un code PHP écrit à la main, sur un exemple.
- citer deux forces et deux limites de Laravel, avec un exemple pour chacune.
- lire la table des versions pour savoir si un projet reçoit encore des correctifs, puis ouvrir la bonne documentation.
1. D'où vient Laravel
En 2011, Taylor Otwell travaille avec CodeIgniter, un framework PHP très répandu à l'époque. CodeIgniter ne fournit pas l'authentification, le mécanisme qui vérifie l'identité de la personne connectée. Les développeurs doivent donc ajouter ce mécanisme à chaque projet. Taylor Otwell écrit son propre framework pour le fournir directement. La première bêta de Laravel sort le 9 juin 2011.
En mai 2013, Laravel 4 remplace les versions précédentes par une nouvelle organisation. Ses différentes parties deviennent des paquets, des ensembles de code PHP installés séparément. Composer est l'outil qui installe les paquets demandés par un projet PHP.
Pour certaines fonctions, Laravel utilise aussi des paquets du framework Symfony. La documentation de Symfony appelle ces paquets des composants. Ce rapprochement avait commencé plus tôt : Laravel 3.2 utilisait déjà un composant Symfony en 2012.
Dans le projet Laravel 13 que vous créerez au chapitre Installation, cette commande affiche les paquets Symfony installés :
composer show 'symfony/*' --name-only | grep -v -e polyfill -e contracts
symfony/clock
symfony/console
symfony/error-handler
symfony/event-dispatcher
symfony/finder
symfony/http-foundation
symfony/http-kernel
symfony/mailer
…
La sortie complète compte seize lignes. Les huit lignes ci-dessus en montrent une partie. Le paquet symfony/http-foundation fournit les classes qui représentent la requête HTTP reçue par l'application. Le paquet symfony/console fournit une partie du code utilisé par Artisan, l'outil Laravel qui exécute les commandes écrites sous la forme php artisan.
Laravel réutilise donc du code maintenu par Symfony pour plusieurs tâches. Il ajoute autour de ces paquets ses propres classes, ses règles de nommage et les méthodes que vous utilisez dans un projet Laravel.
Sous Windows, PowerShell n'a pas grep. Remplacez-le par Select-String :
composer show 'symfony/*' --name-only | Select-String -NotMatch 'polyfill|contracts'
Note
Histoire. Symfony a été créé par Fabien Potencier chez SensioLabs, une entreprise française, et publié en logiciel libre en octobre 2005. Laravel arrive six ans plus tard. Un projet Laravel 13 installe seize paquets Symfony, dont onze sont demandés directement par laravel/framework. Ce compte exclut les polyfills, qui reproduisent des fonctions absentes d'une version de PHP, et les contrats, qui définissent des interfaces communes entre paquets.
En mai 2014, Taylor Otwell lance Laravel Forge, un service payant qui prépare et configure des serveurs pour y déployer une application Laravel. Les revenus de Forge permettent ensuite à Taylor Otwell de travailler à plein temps sur Laravel.
Depuis Laravel 9, en février 2022, une version majeure sort chaque année, en début d'année. Ce type de version peut modifier ou supprimer un fonctionnement utilisé par le code existant. Avant de passer de Laravel 12 à Laravel 13, vous devez donc lire le guide de mise à jour et adapter les passages concernés.
Le 5 septembre 2024, Laravel lève 57 millions de dollars auprès du fonds d'investissement Accel. Une levée de fonds, c'est de l'argent apporté par des investisseurs en échange d'une part de l'entreprise. L'argent finance Laravel Cloud, un service d'hébergement lancé le 24 février 2025, le même jour que Laravel 12. Laravel 13 sort le 17 mars 2026.
2. Les personnes
Laravel est développé par une équipe qui travaille à distance depuis plusieurs pays. Ses membres publient du code, de la documentation et des présentations.
Taylor Otwell a créé Laravel. Il dirige aujourd'hui l'entreprise Laravel.
- Nuno Maduro a créé Pest, le lanceur de tests qui exécute les tests et affiche leurs résultats. Vous l'utilisez depuis le bloc POO. Il a aussi créé Pint, qui remet votre code en forme, et Collision, qui affiche les erreurs dans le terminal.
- Jess Archer a créé Laravel Prompts, les questions interactives de l'installeur, et, avec Tim MacDonald, Laravel Pulse, un tableau de bord des performances. Elle a présenté Nightwatch, le service de surveillance des applications en production.
- Dries Vints, membre de l'équipe centrale, maintient les paquets libres de Laravel.
- Tim MacDonald est membre de l'équipe centrale et le premier contributeur des dépôts de Pulse et de Nightwatch.
- Joe Dixon a créé Reverb, le serveur de Laravel pour les pages mises à jour en temps réel, et encadre une équipe d'ingénieurs chez Laravel.
D'autres personnes ne travaillent pas dans l'équipe de Laravel, mais publient des outils utilisés dans de nombreux projets.
- Jeffrey Way a fondé Laracasts en 2013, le site de cours vidéo sur Laravel.
- Caleb Porzio a créé Livewire et Alpine.js, deux outils pour rendre une page interactive sans écrire d'application JavaScript séparée.
- Jonathan Reinink a créé Inertia, qui relie une application Laravel à une interface en Vue, React ou Svelte. Il est aussi l'un des auteurs de Tailwind CSS.
- Freek Van der Herten travaille chez Spatie, une entreprise d'Anvers qui maintient plus de 500 paquets libres pour PHP et Laravel. Certains, comme
spatie/laravel-permission, sont dans un grand nombre de projets Laravel. - Marcel Pociot fait partie de Beyond Code, l'entreprise qui a créé Herd.
3. Ce que Laravel contient
Au chapitre Framework et librairie, vous avez vu qu'un framework reçoit la requête et consulte une route, une règle qui associe l'adresse demandée à du code. Cette route indique le contrôleur, la classe dont une méthode doit traiter la requête. Laravel fournit aussi les outils nécessaires aux tâches courantes d'une application web.
- Un ORM, pour Object-Relational Mapper, relie les tables de la base aux objets PHP. Lors d'une lecture, il transforme chaque ligne obtenue en objet, par exemple une ligne de
postsen objetPost. Lors d'un enregistrement, il utilise les propriétés de cet objet pour créer ou modifier la ligne correspondante. - Une migration est une classe PHP qui décrit une modification de la structure de la base, ses tables et leurs colonnes, par exemple « créer la table
posts». Elle est versionnée avec le reste du code. - Une file d'attente enregistre une tâche pour qu'elle soit exécutée après la réponse au navigateur. Par exemple, le contrôleur enregistre la tâche « envoyer ce courriel », puis termine la requête sans attendre l'envoi. Un programme Laravel lancé en arrière-plan récupère ensuite la tâche et envoie le courriel.
- Un cache conserve temporairement un résultat déjà calculé. L'application peut le relire au lieu de recommencer le même calcul ou la même requête.
- Un starter kit est un projet de départ officiel qui contient déjà l'inscription, la connexion et leurs pages.
- Un template est un fichier qui contient le HTML de la page et des emplacements pour les données. Le moteur de templates Blade remplace ces emplacements, par exemple par le titre d'un article, avant d'envoyer le HTML au navigateur.
| Besoin | Composant | Nom dans Laravel |
|---|---|---|
| Associer une URL à du code | le routeur | Route::get() dans routes/web.php |
| Lire et écrire en base avec des objets | l'ORM | Eloquent |
| Produire du HTML | le moteur de templates | Blade |
| Lancer des commandes dans le terminal | la console | Artisan, php artisan |
| Faire évoluer la structure de la base | les migrations | php artisan migrate |
| Vérifier les données d'un formulaire | la validation | $request->validate() |
| Inscrire et connecter des utilisateurs | l'authentification | Fortify, starter kits |
| Remettre un travail lent à plus tard | les files d'attente | Queue, dispatch() |
| Tester l'application | le lanceur de tests | Pest ou PHPUnit |
| Compiler le CSS et le JavaScript | l'outil de compilation | Vite |

Laravel désigne à la fois le framework libre et l'entreprise qui développe des services autour de lui. Forge aide à configurer un serveur, Cloud héberge l'application, Nova fournit une interface d'administration et Nightwatch surveille une application en production.
Herd installe les outils du développement local et propose aussi des fonctions payantes. D'autres projets utilisés avec Laravel, comme Livewire, Inertia et Pest, restent gratuits. Ces produits ne font pas partie des fonctions du framework et certains sont vendus séparément.
4. Ce qui le distingue
Dans le bloc POO, vous avez déjà lu ce contrôleur :
<?php
namespace App\Http\Controllers;
use App\Models\Post;
use Illuminate\View\View;
class PostController extends Controller
{
public function index(): View
{
$posts = Post::latest()->get();
return view('posts.index', ['posts' => $posts]);
}
}
La ligne Post::latest()->get() lit tous les articles, du plus récent au plus ancien. PDO est une extension de PHP qui permet d'envoyer des requêtes SQL à une base de données. Sans framework, la même lecture dans une base SQLite qui contient deux articles s'écrit ainsi :
<?php
$pdo = new PDO('sqlite:' . __DIR__ . '/blog.sqlite');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$statement = $pdo->prepare('SELECT * FROM posts ORDER BY created_at DESC');
$statement->execute();
$posts = $statement->fetchAll(PDO::FETCH_ASSOC);
foreach ($posts as $post) {
echo $post['created_at'] . ' ' . $post['title'] . PHP_EOL;
}
2026-09-24 19:30:00 Installer Laravel 13
2026-09-20 18:00:00 Bienvenue sur le blog
Dans un projet Laravel 13 relié à la même base, une boucle placée après Post::latest()->get() affiche exactement les deux mêmes lignes. Le code Laravel obtient ce résultat autrement.
- Dans la version PDO, votre fichier crée la connexion, choisit SQLite, donne le chemin de la base et active le signalement des erreurs. Dans Laravel, ces réglages ne se trouvent pas dans le contrôleur. Le fichier
.envcontient les réglages propres à votre machine. Sa ligneDB_CONNECTION=sqlitechoisit SQLite, tandis queconfig/database.phpfournit le chemin par défaut. Laravel crée ensuite la connexion et configure la gestion des erreurs avant d'exécuter le contrôleur. C'est pourquoi la lecture tient ici dansPost::latest()->get(). - Vous n'écrivez pas la requête SQL. À partir de
latest(), Eloquent construitorder by "created_at" desc, car Laravel utilise par défaut la colonnecreated_atpour la date de création. - PDO renvoie ici des tableaux. Eloquent renvoie des objets
App\Models\Post. Vous lisez donc un titre avec$post->title, et l'éditeur peut proposer les membres déclarés par la classePost.

L'expression expérience développeur désigne ici ce qui facilite le travail quotidien de la personne qui programme. Dans cet exemple, Laravel réduit le nombre de lignes à écrire, place la configuration dans des fichiers prévus pour cela et renvoie des objets Post prêts à utiliser. Ces choix permettent d'obtenir plus vite le résultat attendu, mais cachent aussi une partie des opérations effectuées par PDO.
Des conventions. Une convention est une règle appliquée par défaut. Laravel associe la classe Post à la table posts grâce à une règle de nommage. Il place aussi les contrôleurs dans app/Http/Controllers. Lorsque votre projet respecte ces règles, vous n'avez pas besoin d'indiquer séparément le nom de la table ni l'emplacement habituel de ces classes.
Des outils regroupés. Le framework fournit l'authentification, la validation, les files d'attente, le cache, l'envoi de courriels et les tests. Leur documentation se trouve sur le même site et leurs fichiers suivent l'organisation d'un projet Laravel.
Une documentation par version. Chaque page présente d'abord un exemple de code, puis en explique l'utilisation. Une documentation distincte accompagne chaque version de Laravel.
Des ressources extérieures. Laracasts publie des cours, Laravel News des articles, Spatie des paquets et les conférences Laracon des présentations. Vous disposez ainsi d'exemples qui complètent la documentation officielle.
5. Forces et limites
Forces
- La productivité. Un projet neuf contient déjà un routeur, une base SQLite, des tests et un serveur de développement. Dans l'exemple précédent, le contrôleur lit les articles avec une seule ligne d'Eloquent.
- Des outils réunis dans le même projet. Les commandes de génération d'Artisan créent les fichiers aux emplacements attendus par Laravel. Eloquent fournit les données, puis Blade les affiche. La documentation présente ces outils ensemble et reprend les noms des dossiers du projet. Vous passez ainsi d'un outil à l'autre sans apprendre une nouvelle organisation pour chacun.
- Les paquets disponibles. Pour ajouter une fonction courante, comme les rôles, les paiements ou l'envoi de SMS, vous pouvez chercher un paquet conçu pour Laravel au lieu d'écrire toute la fonction vous-même.
- Un calendrier connu. Laravel existe depuis quinze ans, une entreprise finance son développement et une version majeure sort chaque année. Les dates de fin des correctifs permettent de prévoir les mises à jour d'un projet.
Limites
- Certains appels cachent plusieurs étapes. Quand vous lisez
Post::latest(), vous pouvez chercherlatest()dansPostet ne pas la trouver. PHP exécute alors__callStatic(), une méthode spéciale héritée de la classeModel. Cette méthode reçoit le nomlatest, crée l'objet qui construit la requête SQL et lui transmet l'appel. Les classesCacheetDB, appelées façades, utilisent une idée comparable. La méthode__callStatic()de leur classe parente récupère un objet préparé par Laravel, puis exécute sur cet objet la méthode demandée. L'écritureCache::get()réduit ainsi le code à taper, mais rend le trajet du programme moins visible lorsque vous cherchez une erreur. - Le modèle Active Record. Avec Eloquent, un objet
Postreprésente une ligne deposts. Il contient par exemple son titre et son texte. Le même objet peut modifier cette ligne lorsque vous appelez$post->save(). Cette organisation s'appelle Active Record. Elle réunit dans la classePostles données de l'article et l'accès à la base. Une règle placée dans cette classe peut alors être plus difficile à tester seule, carPostdépend aussi d'Eloquent et, selon le test, d'une base de données. - La dépendance aux outils choisis. Chaque paquet ajouté peut imposer des versions de PHP ou de Laravel et possède son propre calendrier de maintenance. Avant une mise à jour, vous devez donc vérifier que les paquets et services utilisés restent compatibles.
- L'image de PHP. Certains développeurs associent encore PHP aux limites de ses versions des années 2000. Laravel ne change pas cette opinion à lui seul, et vous pouvez rencontrer ce jugement en entretien.
Symfony demande souvent d'écrire ou de choisir plus directement la configuration qui relie les parties de l'application. Laravel fournit davantage de règles par défaut. Par exemple, la classe Post utilise automatiquement la table posts. Le choix de Symfony rend certains réglages plus visibles. Celui de Laravel réduit le code nécessaire lorsque ses conventions conviennent au projet. En 2025, dans l'enquête Stack Overflow, 8,9 % des répondants disaient utiliser Laravel, et 4 % Symfony.1
6. Versions et support
Une correction de bug répare un comportement qui ne correspond pas au résultat prévu. Un correctif de sécurité ferme une faille qu'un attaquant pourrait utiliser. Pour chaque version, Laravel publie la date de fin de ces deux types de correctifs.
| Version | PHP | Sortie | Fin des corrections de bugs | Fin des correctifs de sécurité |
|---|---|---|---|---|
| 10 | 8.1 à 8.3 | 14 février 2023 | 6 août 2024 | 4 février 2025 |
| 11 | 8.2 à 8.4 | 12 mars 2024 | 3 septembre 2025 | 12 mars 2026 |
| 12 | 8.2 à 8.5 | 24 février 2025 | 13 août 2026 | 24 février 2027 |
| 13 | 8.3 à 8.5 | 17 mars 2026 | 3e trimestre 2027 | 17 mars 2028 |
La règle officielle prévoit une version majeure par an, 18 mois de corrections de bugs et 2 ans de correctifs de sécurité. Deux versions reçoivent donc presque toujours des correctifs de sécurité en même temps. Leurs périodes de corrections de bugs ne se chevauchent que pendant quelques mois. Au 26 septembre 2026, Laravel 13 reçoit les deux types de correctifs. Laravel 12 ne reçoit plus que les correctifs de sécurité. Laravel 11 et Laravel 10 ne reçoivent plus aucun correctif.
La version de PHP impose une seconde limite. Même si Laravel 13 reçoit encore tous ses correctifs, vous ne pouvez pas l'installer chez un hébergeur qui ne propose que PHP 8.2.
La documentation se trouve à l'adresse laravel.com/docs/13.x, qui mène aujourd'hui à laravel.com/framework/docs/13.x.
- Le sélecteur de version affiche la documentation d'une version précise. Vérifiez qu'il correspond à la version du projet ouvert. La ligne
"laravel/framework"decomposer.jsoncontient ce numéro. - Le menu de gauche classe les pages par thème : Prologue, Getting Started, Architecture Concepts, The Basics, Digging Deeper, Security, Database, Eloquent ORM, AI, Testing, Packages.
- Le bouton « Copy as markdown » copie le texte de la page. Vous pouvez fournir ce texte à un assistant IA afin que sa réponse repose sur la documentation de la bonne version.
7. Ressources
- La documentation officielle, en anglais : https://laravel.com/docs/13.x
- Laravel Learn, deux mini-cours vidéo gratuits de l'équipe Laravel, dont un sur les bases de PHP : https://laravel.com/learn. L'ancienne adresse du Laravel Bootcamp y mène.
- Laracasts, des séries vidéo sur Laravel, PHP et les outils autour : https://laracasts.com
- Laravel News, l'actualité du framework et des paquets : https://laravel-news.com
- Laravel Daily, des articles et vidéos courts sur des cas concrets : https://laraveldaily.com
- laravel.sillo.org, un blog en français, à jour pour Laravel 13 : https://laravel.sillo.org
À retenir
- Taylor Otwell a créé Laravel en 2011 pour offrir ce que CodeIgniter n'avait pas, dont l'authentification.
- Laravel 4, en mai 2013, est découpé en paquets Composer et généralise l'usage des composants Symfony.
- Laravel regroupe le routeur, l'ORM Eloquent, les templates Blade, la console Artisan, les migrations, la validation, l'authentification, les files d'attente et les tests dans un même projet.
- Ses conventions réduisent la configuration à écrire, mais certains appels transmettent le travail à des objets que vous ne voyez pas dans votre classe.
- Chaque version majeure reçoit 18 mois de corrections de bugs et 2 ans de correctifs de sécurité, et la documentation se lit dans la version du projet.
Exercices
1. Lire la table des versions. À l'aide de la table des versions ci-dessus, répondez sur papier aux trois questions.
- Un projet en Laravel 11 reçoit-il encore des correctifs de sécurité en octobre 2026 ?
- Un client a un projet en Laravel 12. En octobre 2026, que reçoit-il encore, et jusqu'à quand ?
- L'hébergeur d'un client ne propose que PHP 8.2. Quelle version de Laravel pouvez-vous installer, et quel problème aurez-vous en mars 2027 ?
2. Les dates et les personnes. Répondez dans votre tête, puis retournez la carte.
Stack Overflow Developer Survey 2025, section « Web frameworks and technologies », tous répondants : https://survey.stackoverflow.co/2025/technology ↩