Skip to main content

Introduction

Ce guide décrit la procédure pour migrer d’une ancienne structure d’application Laravel 10 (avec les classes Kernel et de multiples service providers) vers le Slim Application Skeleton de Laravel 11+.
La documentation officielle ne recommande pas cette migration.
  • L’ancienne structure Laravel 10 continue de fonctionner telle quelle sur Laravel 11+. Aucun retrait de support n’est prévu, y compris pour la version actuelle Laravel 13.
  • La migration est totalement facultative. Elle n’est ni imposée, ni recommandée.
  • Si vous ne comprenez pas en profondeur les différences entre l’ancienne et la nouvelle structure, il est fortement conseillé d’éviter la migration. C’est une opération destinée aux développeurs familiers avec l’intérieur du framework.
  • Avant la migration, effectuez impérativement une sauvegarde et assurez-vous que tous les tests passent.

Quand la migration devient nécessaire

Vous pouvez envisager la migration dans les cas suivants :
  • Vous voulez aligner votre projet sur la structure standard la plus récente pour que les nouveaux membres puissent se référer facilement à la documentation officielle
  • Vous souhaitez maintenir la cohérence avec des packages ou des starter kits nouvellement créés sur Laravel 11+
  • Vous voulez réduire les fichiers de configuration et les classes hérités de l’ancienne structure pour simplifier la base de code

Prérequis

Ce guide part des hypothèses suivantes :
  • La mise à niveau de Laravel est terminée (laravel/framework ^11.0 ou supérieur)
  • Tous les tests existants passent
  • Vous comprenez la structure d’application Laravel 11+ (consultez Structure d’application Laravel 11+)

Exemple de migration

Nous illustrons ici la procédure de migration d’un projet créé avec Laravel 10 + Breeze (stack Blade) vers la nouvelle structure d’application, tout en conservant Breeze.
1

Remplacer bootstrap/app.php

L’ancien bootstrap/app.php créait une instance $app et enregistrait les kernels. Nous le remplaçons par la chaîne Application::configure().Ancien (Laravel 10) :
Nouveau (Laravel 11+) :
Les callbacks withMiddleware() et withExceptions() sont l’endroit où porter la configuration des fichiers Kernel que nous supprimerons aux étapes suivantes. Laissez-les vides pour l’instant, ils seront complétés dans les étapes ultérieures.
2

Supprimer le HTTP Kernel (app/Http/Kernel.php)

app/Http/Kernel.php définissait les middlewares globaux, les groupes de middlewares et les alias de middlewares.Ancien (app/Http/Kernel.php) :
Dans Laravel 11, les middlewares ci-dessus sont intégrés en interne dans le framework comme valeurs par défaut. Si vous n’avez aucune personnalisation, vous pouvez supprimer directement app/Http/Kernel.php.Si vous avez des personnalisations (ajouts ou exclusions de middlewares personnalisés), portez-les dans withMiddleware() de bootstrap/app.php avant de supprimer le fichier.
Une fois le portage terminé, supprimez app/Http/Kernel.php.
Dans Laravel 11, les classes de middlewares par défaut telles que TrustProxies, EncryptCookies, VerifyCsrfToken peuvent également être supprimées de app/Http/Middleware/. Ces classes étant intégrées au framework, les fichiers eux-mêmes deviennent inutiles s’il n’y a pas de personnalisation.
3

Supprimer le Console Kernel (app/Console/Kernel.php)

app/Console/Kernel.php était chargé de la définition des tâches planifiées et du chargement automatique des commandes.Ancien (app/Console/Kernel.php) :
Le chargement automatique des commandes n’a plus besoin de $this->load() sous Laravel 11+ car le répertoire app/Console/Commands/ est scanné automatiquement.La définition des tâches planifiées est migrée vers routes/console.php ou withSchedule() dans bootstrap/app.php.
Après migration, supprimez app/Console/Kernel.php.
Ne supprimez pas les fichiers de commandes Artisan personnalisées présents dans app/Console/. Conservez ces fichiers de commandes et ne supprimez que le fichier de la classe Kernel.
4

Supprimer le gestionnaire d'exceptions (app/Exceptions/Handler.php)

app/Exceptions/Handler.php était chargé de la configuration du reporting et du rendu des exceptions.Ancien (app/Exceptions/Handler.php) :
Si vous avez des personnalisations, portez-les dans withExceptions() de bootstrap/app.php avant de le supprimer.
Si vous aviez ajouté vos propres entrées à $dontFlash, elles se portent de la même façon.
Une fois le portage terminé, supprimez app/Exceptions/Handler.php.
5

Supprimer RouteServiceProvider et migrer l'enregistrement des routes

app/Providers/RouteServiceProvider.php s’occupait du chargement des fichiers de routes et de la configuration du rate limiting.Ancien (app/Providers/RouteServiceProvider.php) :
L’enregistrement des fichiers de routes est migré vers withRouting() dans bootstrap/app.php.
Le rate limiting est migré vers AppServiceProvider::boot().
Si vous utilisez la constante HOME quelque part, remplacez-la par la chaîne d’URL directement ou déplacez la constante dans AppServiceProvider.Après migration, supprimez app/Providers/RouteServiceProvider.php.
6

Organiser les service providers

Laravel 10 fournissait par défaut 5 service providers. Nous les consolidons dans un seul AppServiceProvider.php.Providers à supprimer (déplacer le contenu dans AppServiceProvider avant suppression) :Exemple de migration de l’ancien app/Providers/AuthServiceProvider.php :
Une fois les fichiers de providers inutiles supprimés, supprimez le tableau providers dans config/app.php.
Créez ensuite bootstrap/providers.php pour prendre en charge la nouvelle structure.
Si bootstrap/providers.php existe, Laravel le charge en priorité comme liste des providers.
7

Mettre à jour la classe de base des contrôleurs

La classe de base Controller de Laravel 10 utilisait les traits AuthorizesRequests et ValidatesRequests. La nouvelle classe de base de Laravel 11 est une classe abstraite simple qui n’utilise pas ces traits.Ancien (Laravel 10) :
Nouveau (Laravel 11+) :
Les fonctionnalités fournies par les traits se remplacent ainsi :Si des contrôleurs existants utilisent les méthodes des traits, vous pouvez soit corriger chaque contrôleur, soit conserver les traits dans la classe de base Controller. Il n’est pas obligatoire de tout changer d’un coup.
Si les contrôleurs d’authentification générés par Breeze ou Jetstream appellent $this->validate() ou $this->authorize(), vérifiez impérativement le comportement avant de changer la classe de base.
8

Supprimer les fichiers config inutiles

Les fichiers comme config/cors.php, config/hashing.php, config/view.php qui n’ont pas été modifiés par rapport à la version par défaut peuvent être supprimés. Conservez les fichiers que vous avez modifiés.
9

Mettre à jour public/index.php

Puisqu’il a été modifié pour la nouvelle structure, réécrivez-le entièrement.
10

Mettre à jour artisan

Le fichier artisan doit être entièrement réécrit de la même façon.
11

Mettre à jour tests/TestCase.php

Le trait CreatesApplication n’est plus nécessaire, donc modifiez-le. Vous pouvez supprimer tests/CreatesApplication.php.
12

Mettre à jour .env, .env.example, phpunit.xml

Comme CACHE_DRIVER est devenu CACHE_STORE et que des entrées ont été ajoutées, modifiez-les si nécessaire. Ces modifications concernent aussi les fichiers de config et l’environnement de production, alors procédez avec prudence. Il n’est pas obligatoire de suivre ces changements à la lettre.
13

Vérification du fonctionnement

Une fois la migration terminée, procédez aux vérifications suivantes dans cet ordre.
En cas de problème, restaurez les fichiers supprimés depuis votre sauvegarde et examinez les messages d’erreur.

Structure de fichiers après migration

Après la migration, le projet aura la structure suivante (les changements par rapport à l’ancienne structure sont indiqués) :

Récapitulatif

Liens de référence

Dernière modification le 13 juillet 2026