Introduzione
Questa guida illustra come migrare dalla vecchia struttura applicativa di Laravel 10 e precedenti (con classiKernel e più service provider) allo Slim Application Skeleton di Laravel 11 e successivi.
Quando serve migrare
Puoi valutare la migrazione nei casi seguenti.- Vuoi allineare il progetto alla struttura standard più recente per facilitare l’onboarding di nuovi membri con la documentazione ufficiale
- Vuoi mantenere coerenza con pacchetti o starter kit creati in Laravel 11+
- Vuoi ridurre file e classi ereditati dalla vecchia struttura e semplificare la codebase
Prerequisiti
La guida presuppone questa situazione.- L’upgrade di Laravel è già stato completato (
laravel/framework ^11.0o successivi) - Tutti i test esistenti passano
- Hai compreso la struttura applicativa di Laravel 11+ (vedi Struttura dell’applicazione da Laravel 11)
Esempio di migrazione
Ecco la procedura per un progetto creato con Laravel 10 + Breeze (stack Blade) in cui vuoi mantenere Breeze ma migrare solo la struttura applicativa.Sostituire bootstrap/app.php
bootstrap/app.php creava l’istanza $app e registrava i kernel. Sostituiscilo con la chain Application::configure().Vecchio (Laravel 10):withMiddleware() e withExceptions() sono i posti in cui trasferirai le impostazioni dei file kernel che eliminerai nei prossimi step. Lasciale vuote per ora e le compileremo dopo.Eliminare il kernel HTTP (app/Http/Kernel.php)
app/Http/Kernel.php erano definiti middleware globali, gruppi di middleware e alias.Vecchio (app/Http/Kernel.php):app/Http/Kernel.php.In caso di personalizzazioni (middleware aggiunti o rimossi), trasferisci il tutto in withMiddleware() di bootstrap/app.php prima di eliminare.app/Http/Kernel.php.TrustProxies, EncryptCookies, VerifyCsrfToken, ecc.) da app/Http/Middleware/. Sono integrate nel framework: se non le personalizzi, il file non serve.Eliminare il kernel della console (app/Console/Kernel.php)
app/Console/Kernel.php gestiva schedule e auto-load dei comandi.Vecchio (app/Console/Kernel.php):app/Console/Commands/ viene scansionata automaticamente, quindi $this->load() non serve.Definizione dello schedule: spostala in routes/console.php o in withSchedule() di bootstrap/app.php.app/Console/Kernel.php.app/Console/. Lascia i comandi al loro posto ed elimina solo il file della classe Kernel.Eliminare l'exception handler (app/Exceptions/Handler.php)
app/Exceptions/Handler.php gestiva le impostazioni di report e rendering delle eccezioni.Vecchio (app/Exceptions/Handler.php):withExceptions() di bootstrap/app.php prima di eliminare.$dontFlash, puoi trasferirle in modo analogo.app/Exceptions/Handler.php.Eliminare RouteServiceProvider e migrare la registrazione delle rotte
app/Providers/RouteServiceProvider.php caricava i file delle rotte e configurava il rate limit.Vecchio (app/Providers/RouteServiceProvider.php):withRouting() di bootstrap/app.php.AppServiceProvider::boot().HOME, sostituiscila con la stringa URL diretta o spostala in AppServiceProvider.Dopo la migrazione elimina app/Providers/RouteServiceProvider.php.Riordinare i service provider
AppServiceProvider.php.Provider da eliminare (dopo aver trasferito i contenuti in AppServiceProvider):app/Providers/AuthServiceProvider.php:providers da config/app.php.bootstrap/providers.php per la nuova struttura.bootstrap/providers.php è presente, Laravel privilegia questo file come elenco dei provider.Aggiornare la classe base Controller
Controller usava i trait AuthorizesRequests e ValidatesRequests. La nuova classe base di Laravel 11 è una classe astratta semplice senza questi trait.Vecchio (Laravel 10):Controller. Non è obbligatorio cambiare tutto insieme.Eliminare i file di config non necessari
config/cors.php, config/hashing.php, config/view.php che non hai modificato rispetto al default si possono eliminare. Mantieni quelli che hai personalizzato.Aggiornare public/index.php
Aggiornare artisan
artisan.Aggiornare tests/TestCase.php
CreatesApplication non serve più, quindi modifica il file.
Puoi eliminare tests/CreatesApplication.php.Aggiornare .env, .env.example, phpunit.xml
CACHE_DRIVER è diventato CACHE_STORE e sono state aggiunte voci: modificale se necessario.
Queste modifiche toccano file di config e ambienti di produzione, quindi procedi con cautela.
Non è obbligatorio adeguarsi a tutti i costi.Verifica del funzionamento