Laravel 10: uno sguardo sulle nuove funzionalità


Pubblicato il (3 settimane fa)

Tempo di Lettura Stimata: 4 minuti

Capitoli Totali: 2


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à il 7 febbraio 2023.

Se ti interessa conoscere la Roadmap completa, eccoti servito:

  • Laravel 9: 8 febbraio 2022
  • Laravel 10: 7 febbraio 2023
  • Laravel 11: 6 febbraio 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 7th, 2023 August 6th, 2024 February 4th, 2025
11 8.2 February 6th, 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.

Guarda su Github

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

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 Lowercase
php artisan make:rule Lowercase --implicit

Guarda su Github

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

Guarda su github

Metodi Deprecati

E infine ecco una lista di tutti i metodi Deprecati che non saranno più disponibili in laravel 10