
Aggiornamento di Laravel dalla versione 10 alla 13
By
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 🙂