Skip to main content
Con Laravel 11 la struttura dell’applicazione è cambiata in modo significativo, prendendo il nome di “Slim Application Skeleton”. Questa FAQ raccoglie i punti su cui è facile disorientarsi se ti unisci a un progetto aggiornato ma con struttura vecchia, o hai studiato su libri e tutorial di Laravel 10 o precedenti. Sono domande che al rilascio di Laravel 11 comparivano spesso su Laracasts, Stack Overflow e simili.
Questa FAQ si riferisce ai nuovi progetti (Laravel 11 e successivi). Per l’upgrade di progetti esistenti consulta la guida di migrazione.
Nella nuova struttura i file di config che cambiano raramente sono stati rimossi dal progetto. Al loro posto vengono usati i config/ interni del framework.Il config/ del progetto e quello del framework vengono fusi, con precedenza al progetto. Quando ti serve personalizzare, crea il file e la modifica verrà applicata.
Nella nuova struttura di Laravel 11 App\Http\Controllers\Controller è una classe vuota: non estende Illuminate\Routing\Controller e non usa i trait ValidatesRequests / AuthorizesRequests.Riferimenti: Controller di Laravel 10 vs Controller di Laravel 11Alternative:
Se ti serve spesso, puoi anche ripristinare App\Http\Controllers\Controller come in Laravel 10.
Nella nuova struttura app/Http/Kernel.php è stato rimosso e le impostazioni dei middleware si configurano in bootstrap/app.php con withMiddleware().
I file dei middleware personalizzati vanno comunque in app/Http/Middleware/.
$this->middleware() è una funzionalità di Illuminate\Routing\Controller: nel controller base vuoto della nuova struttura non è disponibile.In sostituzione implementa l’interfaccia HasMiddleware e definisci il metodo middleware().
Da Laravel 13 puoi anche usare l’attributo #[Middleware].
Riferimento: Middleware dei controller
authorizeResource() dipende dal trait AuthorizesRequests: nel controller base vuoto della nuova struttura non è disponibile.Ci sono più approcci.1. Ripristinare il controller base allo stile Laravel 10 (il più semplice)
In questo modo $this->authorizeResource() torna disponibile.2. Applicare l’attributo #[Authorize] di Laravel 13 a ciascun metodo
Nella nuova struttura app/Console/Kernel.php è stato rimosso e il posto in cui configurare lo scheduler è cambiato.Scrivere in routes/console.php (consigliato):
Scrivere in bootstrap/app.php:
Nella nuova struttura EventServiceProvider è stato rimosso e non serve più registrare a mano eventi e listener.Meccanismo di registrazione automatica: se dichiari il tipo dell’evento come argomento del metodo handle() del listener, la registrazione avviene automaticamente.
Se hai bisogno di registrazione manuale, fallo in AppServiceProvider::boot().
Nella nuova struttura la gestione dell’elenco dei service provider è passata da config/app.php a bootstrap/providers.php.
I provider creati con artisan make:provider vengono aggiunti automaticamente in questo file.
Nella nuova struttura app/Exceptions/Handler.php è stato rimosso e la configurazione delle eccezioni si fa in bootstrap/app.php con withExceptions().
La personalizzazione delle rotte si fa in bootstrap/app.php con withRouting().Aggiungere un file di rotte:
Controllo completo (equivalente al RouteServiceProvider di Laravel 10):Con using disabiliti completamente la registrazione delle rotte di default e gestisci tutto tu.
Aggiungendo la chiave providers in config/app.php viene fusa con il config/app.php del framework.
Con replace() sostituisci un provider di default con la tua implementazione.
Da Laravel 11 le funzionalità API non sono più incluse di default; le installi quando servono.
Questo comando crea/configura:
  • routes/api.php
  • la configurazione di Laravel Sanctum per l’autenticazione API
  • la registrazione delle rotte API in bootstrap/app.php
Da Laravel 11 anche il broadcasting non è più incluso di default; lo installi separatamente quando serve.
Questo comando crea/configura:
  • routes/channels.php
  • le impostazioni di installazione di Laravel Reverb
  • i file di configurazione del broadcasting
Controlla il contenuto di bootstrap/app.php.Nuova struttura da Laravel 11 (o già migrata):
Progetto aggiornato mantenendo la vecchia struttura pre-Laravel 11:
Se vedi il formato return Application::configure(... è la nuova struttura, altrimenti si tratta di un progetto aggiornato senza aver migrato lo scheleton. Per la procedura di migrazione consulta la guida di migrazione.

Pagine correlate

Struttura dell'applicazione da Laravel 11

Panoramica completa della nuova struttura dell’applicazione e implementazione interna di ApplicationBuilder.

Guida alla migrazione dalla vecchia alla nuova struttura

Procedura per migrare dall’app skeleton di Laravel 10 alla nuova struttura da Laravel 11.
Ultima modifica il 13 luglio 2026