Introduzione
Laravel 11 è stato rilasciato a marzo 2024. Questa guida illustra la procedura di aggiornamento da Laravel 10.x a 11.x.Il tempo stimato necessario all’aggiornamento è di circa 15 minuti. L’impatto dei breaking change sulla tua applicazione varia però in base alle dimensioni e alle funzionalità utilizzate.
Aggiornamento automatico con Laravel Shift
Puoi automatizzare l’aggiornamento con Laravel Shift. Shift aggiorna in automatico le dipendenze e i file di configurazione dell’applicazione.Cambiamenti per livello di impatto
Impatto: Alto
- Aggiornamento delle dipendenze
- Modifica della struttura dell’applicazione
- Modifiche ai tipi in virgola mobile
- Conservazione degli attributi al cambio di colonna
- Versione minima di SQLite
- Aggiornamento di Sanctum
Impatto: Medio
- Carbon 3
- Rehashing delle password
- Rate limiting al secondo
- Pacchetto Spatie Once
Impatto: Basso
- Rimozione di Doctrine DBAL
- Metodo
castsdei modelli Eloquent - Modifiche ai tipi spaziali
- Contract
Enumerable - Contract
UserProvider - Contract
Authenticatable
Procedura di aggiornamento
Aggiornamento delle dipendenze
Impatto: Alto Aggiorna incomposer.json le seguenti dipendenze.
doctrine/dbal, puoi rimuoverlo. Laravel 11 non dipende più da questo pacchetto.
Requisiti versione PHP
Impatto: Alto Laravel 11 richiede PHP 8.2.0 o superiore. Il client HTTP di Laravel richiede inoltre curl 7.34.0 o superiore.Modifica della struttura dell’applicazione
Impatto: Alto In Laravel 11 la struttura predefinita dell’applicazione è stata semplificata. Il numero di service provider, middleware e file di configurazione è stato notevolmente ridotto. Detto ciò, quando aggiorni un’app Laravel 10 a Laravel 11, non è raccomandato provare a migrare la struttura dell’applicazione. Laravel 11 è progettato per supportare anche la struttura di app di Laravel 10. Principali modifiche strutturali:- In
bootstrap/app.phpsi configurano ora direttamente middleware, exception handler e routing app/Http/Kernel.phpè stato dismesso e integrato inbootstrap/app.php- Il numero di service provider predefiniti è stato ridotto e vengono gestiti in
bootstrap/providers.php - Il numero di file nella directory
config/è stato ridotto (se serve puoi pubblicarli conphp artisan config:publish)
Modifiche non retrocompatibili (Breaking Changes)
Autenticazione
Rehashing delle password
Impatto: Medio In Laravel 11, se il “work factor” dell’algoritmo di hash è cambiato, in fase di autenticazione la password viene rehashata automaticamente. Se nel modelloUser il campo password ha un nome diverso da password, specificalo nella proprietà authPasswordName del modello.
config/hashing.php:
Contract UserProvider
Impatto: Basso
Al contract Illuminate\Contracts\Auth\UserProvider è stato aggiunto il metodo rehashPasswordIfRequired. Se hai classi che implementano questa interfaccia, aggiungi il metodo.
Contract Authenticatable
Impatto: Basso
Al contract Illuminate\Contracts\Auth\Authenticatable è stato aggiunto il metodo getAuthPasswordName. Se hai classi che implementano questa interfaccia, aggiungi il metodo.
Database
Versione minima di SQLite
Impatto: Alto Se usi SQLite, è richiesto SQLite 3.26.0 o superiore. Nei nuovi progetti Laravel 11 il driver database predefinito è SQLite.Conservazione degli attributi al cambio di colonna
Impatto: Alto Quando modifichi una colonna, tutti i modificatori che vuoi mantenere dopo la modifica vanno specificati esplicitamente. Gli attributi non indicati vengono rimossi.Modifiche ai tipi in virgola mobile
Impatto: Alto I tipi di colonnadouble e float sono stati unificati su tutti i database.
unsignedDecimal, unsignedDouble e unsignedFloat sono stati rimossi. Se vuoi usare comunque l’attributo unsigned, specificalo in chain.
Metodo casts dei modelli Eloquent
Impatto: Basso
Nella classe base dei modelli Eloquent è stato definito il metodo casts. Se in un modello dell’applicazione hai definito una relazione chiamata casts, dovrai rinominarla per evitare il conflitto.
Driver dedicato MariaDB
Impatto: Molto basso Laravel 11 aggiunge un driver database dedicato per MariaDB. Se ti connetti a MariaDB, puoi usare il drivermariadb nella configurazione.
Modifiche ai tipi spaziali
Impatto: Basso I tipi di colonna spaziali sono stati unificati su tutti i database. Al posto dei metodi comepoint, lineString e polygon, usa geometry o geography.
subtype e srid.
Rimozione di Doctrine DBAL
Impatto: Basso Laravel ha eliminato la dipendenza da Doctrine DBAL. Sono state rimosse le seguenti classi e metodi.Schema\Builder::useNativeSchemaOperationsIfPossible()Connection::getDoctrineConnection()Connection::getDoctrineSchemaManager()Connection::registerDoctrineType()DatabaseManager::registerDoctrineType()- Classe
Schema\Grammars\ChangeColumn - Classe
Schema\Grammars\RenameColumn
Schema::getTables(), Schema::getColumns(), Schema::getIndexes(), Schema::getForeignKeys().
Date
Carbon 3
Impatto: Medio Laravel 11 supporta sia Carbon 2 sia Carbon 3. Se aggiorni a Carbon 3, tieni presente che i metodidiffIn* restituiscono ora un valore in virgola mobile e la direzione del tempo è indicata da valori negativi.
Rate limiting
Rate limiting al secondo
Impatto: Medio Laravel 11 supporta il rate limiting al secondo oltre che al minuto. I costruttori delle classiGlobalLimit e Limit ricevono ora un valore in secondi.
decayMinutes della classe Limit è stata rinominata in decaySeconds ed è ora in secondi.
Anche i costruttori di ThrottlesExceptions e ThrottlesExceptionsWithRedis ricevono ora un valore in secondi.
Pacchetti
Pubblicazione dei service provider
Impatto: Molto basso Nelle nuove app Laravel 11 non c’è più l’arrayproviders in config/app.php. Se in un pacchetto pubblichi service provider, usa il metodo ServiceProvider::addProviderToBootstrapFile.
Sanctum
Aggiornamento di Sanctum
Impatto: Alto Laravel 11 non supporta Sanctum 3.x. Aggiorna la dipendenza di Sanctum incomposer.json a ^4.0.
Sanctum 4.0 non carica più automaticamente le migration. Pubblicale con il comando seguente.
config/sanctum.php.
Pacchetto Spatie Once
Impatto: Medio Laravel 11 fornisce la propria funzioneonce. Se usi il pacchetto spatie/once, rimuovilo da composer.json per evitare conflitti.
Conclusioni
Laravel 11 include modifiche strutturali importanti, ma la struttura di app di Laravel 10 continua a funzionare, quindi puoi migrare in modo graduale.| Modifica | Impatto | Azione |
|---|---|---|
Aggiornamento dipendenze in composer.json | Alto | Passa a laravel/framework ^11.0 |
| PHP 8.2 richiesto | Alto | Verifica la versione di PHP |
| Attributi al cambio di colonna | Alto | Controlla i punti che usano change() |
| Tipi in virgola mobile | Alto | Verifica le definizioni delle colonne double/float |
| SQLite 3.26.0+ richiesto | Alto | Controlla la versione di SQLite |
Sanctum ^4.0 | Alto | Pubblica le migration |
| Carbon 3 | Medio | Controlla i valori di ritorno dei metodi diffIn* |
| Rate limiting al secondo | Medio | Cambia decayMinutes in decaySeconds |
| Rimozione di Doctrine DBAL | Basso | Migra ai metodi nativi dello schema |
Riferimenti
- Guida ufficiale di aggiornamento (in inglese)
- Diff del repository laravel/laravel (10.x → 11.x)
- Laravel Shift — servizio della community che automatizza l’aggiornamento
- Changelog di Carbon 3