Introduction
Ce guide décrit la procédure pour migrer d’une ancienne structure d’application Laravel 10 (avec les classesKernel et de multiples service providers) vers le Slim Application Skeleton de Laravel 11+.
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.0ou 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.Remplacer bootstrap/app.php
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) :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.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) :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.app/Http/Kernel.php.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.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) :$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.app/Console/Kernel.php.app/Console/. Conservez ces fichiers de commandes et ne supprimez que le fichier de la classe Kernel.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) :withExceptions() de bootstrap/app.php avant de le supprimer.$dontFlash, elles se portent de la même façon.app/Exceptions/Handler.php.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) :withRouting() dans bootstrap/app.php.AppServiceProvider::boot().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.Organiser les service providers
AppServiceProvider.php.Providers à supprimer (déplacer le contenu dans AppServiceProvider avant suppression) :| Fichier | Destination |
|---|---|
app/Providers/AuthServiceProvider.php | Gate::policy() etc. dans AppServiceProvider::boot() |
app/Providers/BroadcastServiceProvider.php | Si vous utilisez Broadcasting, withBroadcasting() dans bootstrap/app.php |
app/Providers/EventServiceProvider.php | Event::listen() etc. dans AppServiceProvider::boot() |
app/Providers/RouteServiceProvider.php | Traité à l’étape précédente |
providers dans config/app.php.bootstrap/providers.php pour prendre en charge la nouvelle structure.bootstrap/providers.php existe, Laravel le charge en priorité comme liste des providers.Mettre à jour la classe de base des contrôleurs
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) :| Ancienne méthode (via trait) | Nouvelle méthode |
|---|---|
$this->validate($request, $rules) | $request->validate($rules) |
$this->authorize('update', $post) | Gate::authorize('update', $post) |
$this->authorizeResource(Post::class) | Il n’y a pas de remplacement simple sous Laravel 11 ; conservez App\Http\Controllers\Controller avec la spécification Laravel 10 |
Controller. Il n’est pas obligatoire de tout changer d’un coup.Supprimer les fichiers config inutiles
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.Mettre à jour public/index.php
Mettre à jour tests/TestCase.php
CreatesApplication n’est plus nécessaire, donc modifiez-le.
Vous pouvez supprimer tests/CreatesApplication.php.Mettre à jour .env, .env.example, phpunit.xml
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.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
| Contenu migré | Ancien emplacement | Nouvel emplacement |
|---|---|---|
| Middlewares HTTP | app/Http/Kernel.php | withMiddleware() dans bootstrap/app.php |
| Gestion des exceptions | app/Exceptions/Handler.php | withExceptions() dans bootstrap/app.php |
| Définition des tâches planifiées | app/Console/Kernel.php | routes/console.php |
| Enregistrement des routes | app/Providers/RouteServiceProvider.php | withRouting() dans bootstrap/app.php |
| Liste des service providers | Tableau providers de config/app.php | bootstrap/providers.php |
| Enregistrement des policies | app/Providers/AuthServiceProvider.php | Enregistrement automatique. Manuel avec AppServiceProvider::boot() |
| Event listeners | app/Providers/EventServiceProvider.php | Enregistrement automatique. Manuel avec AppServiceProvider::boot() |