Introduction
Laravel 12 est sorti en février 2025. Ce guide explique la procédure de mise à niveau de Laravel 11.x vers 12.x.Le temps estimé est d’environ 5 minutes. L’impact des changements cassants dépend de la taille de l’application et des fonctionnalités utilisées.
Mise à niveau automatisée avec Laravel Shift
Vous pouvez automatiser la mise à niveau avec Laravel Shift.Changements par impact
Impact élevé
- Mise à jour des dépendances
- Mise à jour de l’installer Laravel
Impact moyen
- Trait Eloquent
HasUuidset UUIDv7
Impact faible
- Carbon 3
- Mapping d’index des résultats Concurrency
- Résolution des dépendances de classe du conteneur
- Exclusion des SVG dans la validation
image - Chemin racine par défaut du disque local
- Introspection multi-schémas
- Merge de tableaux imbriqués dans une requête
Étapes de mise à niveau
Mise à jour des dépendances
Impact : élevé Mettez à jour les dépendances suivantes danscomposer.json.
Mise à jour de l’installer Laravel
Impact : élevé Si vous créez de nouvelles applications avec le CLI installer, mettez-le à jour pour la compatibilité avec Laravel 12.x et les nouveaux starter kits. Installé viacomposer global require :
php.new : relancez la commande d’installation adaptée à votre OS.
- macOS
- Windows PowerShell
- Linux
Nouveaux starter kits
Laravel 12 introduit de nouveaux starter kits qui remplacent Breeze et Jetstream.laravel new propose interactivement le choix de la stack frontend.
Starter kits disponibles :
- React — Inertia 2, React 19, TypeScript, Tailwind 4, shadcn/ui
- Vue — Inertia 2, Composition API, TypeScript, Tailwind 4, shadcn-vue
- Svelte — Inertia 2, Svelte 5, TypeScript, Tailwind 4, shadcn-svelte
- Livewire — Livewire, Tailwind 4, Flux UI
Aucune réinstallation de starter kit n’est nécessaire pour une application existante. Cela concerne les nouveaux projets.
Changements cassants
Eloquent
Trait HasUuids et UUIDv7
Impact : moyen
Le trait HasUuids renvoie désormais des UUID v7 (ordonnés). Pour conserver l’ancien comportement (UUID v4 ordonnés), passez au trait HasVersion4Uuids.
HasVersion7Uuids, remplacez-le par HasUuids (comportement identique).
Validation
Exclusion des SVG dans la validation image
Impact : faible
La règle image n’autorise plus les SVG par défaut. Autorisez-les explicitement si nécessaire.
Stockage
Chemin racine par défaut du disque local
Impact : faible Si le disquelocal n’est pas défini explicitement dans filesystems, le chemin racine par défaut passe de storage/app à storage/app/private.
Pour conserver l’ancien comportement, déclarez explicitement le disque local :
Base de données
Introspection multi-schémas
Impact : faibleSchema::getTables(), Schema::getViews(), Schema::getTypes() retournent désormais les résultats de tous les schémas par défaut. Passez schema pour cibler un schéma.
Schema::getTableListing() renvoie désormais des noms qualifiés par schéma par défaut.
Signature des constructeurs de base de données
Impact : très faible Les constructeurs deIlluminate\Database\Schema\Blueprint et Illuminate\Database\Grammar requièrent désormais une instance Connection en premier argument.
| API | État |
|---|---|
Blueprint::getPrefix() | Déprécié |
Connection::withTablePrefix() | Supprimé |
Grammar::getTablePrefix() / setTablePrefix() | Dépréciés |
Grammar::setConnection() | Supprimé |
Concurrency
Mapping d’index des résultats
Impact : faible Si vous passez un tableau associatif àConcurrency::run(), les résultats sont désormais renvoyés indexés par les mêmes clés.
Conteneur
Valeurs par défaut lors de la résolution de classes
Impact : faible Le conteneur DI respecte désormais les valeurs par défaut des propriétés de classe lors de la résolution d’une instance.Requêtes
Merge de tableaux imbriqués
Impact : faible$request->mergeIfMissing() prend désormais en charge la notation dot pour fusionner des tableaux imbriqués. Auparavant, la clé en notation dot était créée telle quelle au niveau supérieur.
Routage
Priorité des routes
Impact : faible Quand plusieurs routes portent le même nom, le comportement avec ou sans cache est désormais unifié. Sans cache, la première route enregistrée l’emporte (comme avec cache).Authentification
Signature de DatabaseTokenRepository
Impact : très faible
Le constructeur de Illuminate\Auth\Passwords\DatabaseTokenRepository accepte désormais $expires en secondes plutôt qu’en minutes.
Carbon 3
Impact : faible Le support de Carbon 2.x est supprimé. Toute application Laravel 12 requiert Carbon 3.x.Conclusion
La mise à niveau vers Laravel 12 est relativement fluide.| Changement | Impact | À faire |
|---|---|---|
Mise à jour de composer.json | Élevé | laravel/framework ^12.0 |
| Mise à jour de l’installer | Élevé | composer global update |
HasUuids → UUIDv7 | Moyen | Basculer vers HasVersion4Uuids si besoin |
Validation image sans SVG | Faible | allow_svg si SVG requis |
| Racine du disque local | Faible | Déclarer explicitement dans la config |
| Carbon 3 requis | Faible | Vérifier la compatibilité API |
Ressources
- Guide officiel (anglais)
- Diff du dépôt laravel/laravel (11.x → 12.x)
- Nouveaux starter kits
- Laravel Shift — automatisation communautaire des mises à niveau
- Guide de migration Carbon 3