L’inizio del nuovo anno porta con se tante novità: lasciare l’ anno appena passato alle spalle, l’iscrizione in palestra (sperando nel miracolo!..), tagliare i ponti con tutte quelle persone che riteniamo tossiche e, dulcis in fundo, la nuova versione di Laravel: Laravel 10.
Quando esce Laravel 10?
Laravel 10, il successore di Laravel 9, uscirà nel primo trimestre del 2023.
Se ti interessa conoscere la Roadmap completa, eccoti servito:
- Laravel 9: 8 febbraio 2022
- Laravel 10: 14 Febbraio 2023
- Laravel 11: Q1 2024
Ovviamente il rilascio di Laravel 10 non renderà obsolete le precedenti versioni, avrai modo e tempo per allinearti con il ciclo di vita di Laravel.
Da quando il team Laravel ha adottato la cadenza annuale di rilascio per le versioni principali (9.x, 10.x, 11.x …), ci saranno sempre 2 anni di aggiornamenti assicurati!
Per i piú pignoli, eccovi una tabella riassuntiva presa direttamente dal Support Policy Ufficiale:
Versione | PHP (*) | Data di Rilascio | Bug Fixes | Security Fixes |
---|---|---|---|---|
8 | 7.3 - 8.1 | September 8th, 2020 | July 26th, 2022 | January 24th, 2023 |
9 | 8.0 - 8.1 | February 8th, 2022 | August 8th, 2023 | February 6th, 2024 |
10 | 8.1 | February 14th, 2022 | August 6th, 2024 | February 4th, 2025 |
11 | 8.2 | Q1 2024 | August 5th, 2025 | February 3rd, 2026 |
Quali sono le novità di Laravel 10?
Come ogni versione “Principale”, ci sono delle novità più o meno impattanti sull’ intero ecosistema.
Eccoti un elenco dettagliato delle novità:
PHP 8.1 come requisito minimo per Laravel 10
Dalla versione 10 di Laravel diventerà obbligatorio avere almeno la versione 8.1 di PHP.
La versione 8.0 di PHP rilasciata il 26 novembre 2020 viene definitivamente abbandonata.
Prosegue cosi spedita la corsa di tutto il Core Team Laravel che da sempre obbliga gli sviluppatori ad aggiornare periodicamente i server con le nuove versioni PHP per sfruttare appieno tutte le patch di sicurezza e le ottimizzazioni lato performance che il core team PHP rilascia.
Laravel Pennant
Con la versione di Laravel 10, è stato rilasciato un nuovo pacchetto first-party chiamato Laravel Pennant. Laravel Pennant offre un approccio leggero e senza fronzoli per la gestione dei flag nella tua applicazione.
Di serie, Pennant include un driver di array in memoria e un driver di database per una memorizzazione persistente delle funzionalità. Come richiamare queste funzionalità? Bhe, semplice:
use Laravel\Pennant\Feature;use Illuminate\Support\Lottery; Feature::define('new-onboarding-flow', function () { return Lottery::odds(1, 10);});
Una volta che avrai definito la funzionalità, potrai facilmente abilitarla e determinare se l’utente corrente ha accesso al “Flag”.
Ovviamente potrai richiamarla anche in blade:
@feature('new-onboarding-flow') …@endfeature
Pennant offre una varietà di funzionalità avanzate e API. Per ulteriori informazioni, consultare la documentazione completa di Pennant.
Nuova Facade Process
Laravel offre un’API semplice ma completa per il componente Symfony Process, consentendo di eseguire facilmente processi esterni all’interno della tua applicazione Laravel:
use Illuminate\Support\Facades\Process; $result = Process::run('ls -la'); return $result->output();
Process è progettata per soddisfare i casi d’uso più frequenti, offrendo un’esperienza eccezionale per gli sviluppatori. Ma vediamo in dettaglio il funzionamento.
I processi possono anche essere avviati in pool, consentendo l’esecuzione e la gestione di processi concorrenti:
use Illuminate\Process\Pool;use Illuminate\Support\Facades\Pool; [$first, $second, $third] = Process::concurrently(function (Pool $pool) { $pool->command('cat first.txt'); $pool->command('cat second.txt'); $pool->command('cat third.txt');}); return $first->output();
Nativamente implementate le Type declarations
Con Laravel 10 saranno nativamente pre-configurati le type declarations in tutto il codice.
/** * @param \App\Models\User $user * @return void */-public function created($user) +public function created(User $user): void
Il processo di tipizzazione iniziato con PHP 7 arriva ufficalmente anche su tutto il codice ufficiale di Laravel. Guarda su Github
Generator CLI Prompts
Per migliorare l’usabilità del Framework, tutti i comandi make
integrati in Laravel non richiedono più alcun input.
Se i comandi vengono invocati senza input, verranno richiesti gli argomenti necessari:
php artisan make:controller
Comando profile per i test automatici
Il comando
php artisan test --profile
adesso offre una GUI dettagliata di tutti i test e i relativi ms di esecuzione. Il sistema segnalerà automaticamente i test piu lenti cosi da ottimizzarli.
Le regole di validazione diventano Invokable di default
In Laravel 10, quando lancerete il comando Artisan:
php artisan make:rules MiaRegolaPersonale
Verrà generata immediatamente una classe che implementerà InvokableRule invece di Rule:
-class MiaRegolaPersonale implements Rule +class MiaRegolaPersonale implements InvokableRule {- public function __construct()- {- //- }- /** * Run the validation rule. * * @param \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString $fail */+ public function __invoke(string $attribute, mixed $value, Closure $fail): void+ {+ //+ }+}
I comandi Artisan disponibili con Laravel 9.x:
-php artisan make:rule Lowercase -php artisan make:rule Lowercase --invokable -php artisan make:rule Lowercase --invokable --implicit
Con Laravel 10.x, invece, diventeranno molto più eloquenti e quindi avremo:
php artisan make:rule Lowercasephp artisan make:rule Lowercase --implicit
Migration di modifica senza doctrine/dbal
In laravel 10 è stato aggiunto il supporto nativo alla modifica delle colonne tramite Migration ed è stato rimosso l’obbligo di avere doctrine/dbal tra le dipendenze installate.
Immaginiamo di avere una colonna chiamata record di tipo unsigned, con valore di default 1 e un commento:
$table->integer('record')->unsigned()->default(1)->comment('Colonna record');
Per mantenere tutte le proprietà ma modificare solo il tipo, occorrerà definire:
$table->bigInteger('record')->unsigned()->default(1)->comment('Colonna record')->change();
Nell’operazione è richiesta una dichiarazione esplicita, cambiare solo il tipo automaticamente ci farà perdere le proprietà definite all’inizio:
$table->bigInteger('record')->change(); // Perderemo unsigned,default e comment
Metodi Deprecati
E infine ecco una lista di tutti i metodi Deprecati che non saranno più disponibili in laravel 10