Skip to content
Aggiornamento di Laravel dalla versione 10 alla 13

Aggiornamento di Laravel dalla versione 10 alla 13

By Pier Luigi Papeschi

Fare un aggiornamento di Laravel, ovvero passare da una major release ad una superiore, non è un passaggio semplice e indolore. In ogni major release (il primo numero di una versione di un software) succede sicuramente che alcuni componenti vengono abbandonati per essere adottati altri, nuovi e migliori, ma diversi.

Dovendo fare questa operazione su un sito costruito sulla versione 10 e portarlo all’ultima attuale versione di Laravel, la 13, mostro i vari passaggi e le varie difficoltà incontrate.

Come riferimento utilizza sempre la documentazione ufficiale.

Il consiglio furbo… è quello di replicare il sito in un sotto dominio di test e solo ad upgrade ultimato trasferirlo in produzione.

Aggiornamento di Laravel alla versione 13, i passi

La prima cosa che verrebbe da fare è aggiornare dalla 10 alla 13 direttamente, ma non è sicuramente una buona idea perché avremo molte modifiche sia strutturali (scelte di architettura e comportamento) che di contesto (cambio di dipendenza del PHP, ecc.).

Perciò andremo a fare ogni passaggio tra una major release e la successiva cambiando tutto il necessario e non proseguendo finché non abbiamo stabilizzato il sistema. Questo per evitare di perdere i vari riferimenti tra quali possono essere le cause di eventuali problemi.

Prima di “operare”, puliamo la cache e facciamo un’indagine sulla situazione attuale

php artisan optimize:clear
php artisan about
php artisan migrate:status
php artisan test

Perfetto, la nuova installazione di test deve funzionare, indaghiamo ancora altri aspetti, prendi nota delle varie versioni e dei pacchetti utilizzati

php -v
composer.json
composer.lock
package.json
phpunit.xml

Adattamento di Laravel 10, un caso concreto

Bene, nel mio caso vedo che il progetto attuale utilizza un pacchetto chiamato “laravelcollective/html” che è stato dichiarato abbandonato proprio dalla versione 10, quindi nella 11 lo voglio sostituire con qualcosa di diverso. Ho scelto “spatie/laravel-html” (basta fare una ricerca in internet per trovare i sostituti).

Invece di sostituirlo lo aggiungo e lascio il vecchio pacchetto finché non ho fatto le modifiche ai file coinvolti e vedo che funziona tutto. Solo dopo questa fase, tolgo il pacchetto e riverifico che non ci siano altri problemi introdotti o tralasciati.

Perfetto, tutto ok… possiamo impostare la versione di Laravel 11 nel file composer.json e la versione di PHP 8.2 come dipendenza dato che la versione 11 necessita proprio almeno del PHP 8.2

Salva le modifiche al file composer.json e lancia il comando che fa l’upgrade

composer update -W

l’opzione W aggiorna anche tutte le dipendenze, poi verifica che funzioni ancora sia navigando sul sito sia con il comando

php artisan about
php artisan optimize:clear
php artisan migrate:status
php artisan test

Bene, diamo per scontato che tutto funzioni correttamente, quindi possiamo procedere alla versione successiva.

Passiamo dalla 11 alla 12

Stesso discorso per il passo precedente: verifica che i pacchetti utilizzati siano compatibili con la versione 12 e facciamo le modifiche al file composer.json, quella che a noi interessa adesso ai fini di spiegazione di massima è questa

VECCHIA "laravel/framework": "^11.0",
NUOVA   "laravel/framework": "^12.0",

Ovviamente la VECCHIA riga va cancellata. Salviamo e lanciamo composer update -W

Infine i soliti comandi di controllo

php artisan about
php artisan optimize:clear
php artisan migrate:status
php artisan test

Ancora una volta tutto ok! Procediamo spediti 😉

Versione 12 -> 13, l’ultima

E siamo giunti all’ultima versione disponibile ad oggi. Verifichiamo le richieste di Laravel e la compatibilità dei pacchetti che adopero. Trovo che ho diverse modifiche da apportare al file composer.json, quindi le faccio:

"require": {
    "php": "^8.3",
    "algolia/algoliasearch-client-php": "^3.4",
    "algolia/scout-extended": "^3.0",
    "google/recaptcha": "1.3.*",
    "guzzlehttp/guzzle": "^7.2",
    "laravel/framework": "^13.0",
    "laravel/sanctum": "^4.0",
    "laravel/scout": "^10.6",
    "laravel/tinker": "^3.0",
    "spatie/laravel-html": "^3.13"
},
"require-dev": {
    "fakerphp/faker": "^1.9.1",
    "laravel/pint": "^1.0",
    "laravel/sail": "^1.18",
    "laravel/ui": "^4.2",
    "mockery/mockery": "^1.4.4",
    "nunomaduro/collision": "^8.1",
    "phpunit/phpunit": "^12.0",
    "spatie/laravel-ignition": "^2.0"
}

Ti informo che è stata cambiata la versione di PHP, di Laravel, di tinker e phpunit rispetto alla versione 12, ma è pacifico.

Un consiglio: lanciando questi comandi dal terminale, verifica che il php usato sia compatibile con quella di Laravel 13, ovvero la 8.3, con il comando php -vse non lo è cambialo, vedi questo articolo.

Bene, procediamo come al solito, comando di update e test post aggiornamento. Per tutto bene! Spero anche te 🙂