Cosa c’è di Nuovo in Laravel 10


Pubblicato il (1 anno fa)

Tempo di Lettura Stimata: 5 minuti

Capitoli Totali: 2

Immagine di anteprima dell'articolo Cosa c’è di Nuovo in Laravel 10

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.

Guarda su Github

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 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

Francesco Mansi

Chi è l'autore

Da quando le nonnine al supermercato hanno smesso di chiamarmi giovanotto posso finalmente fingermi un adulto con esperienza.
Lavoro con Laravel dalla versione 5.5 e con PHP da più di 10 anni. Non sono un guru ma adoro schematizzare e mettere per iscritto tutto quello che studio, quindi quello che troverai qui sono solamente appunti che spero possano servirti.

Francesco Mansi


Articoli Correlati
Immagine in Evidenza per l'articolo Guida su come installare Laravel su Windows e Mac
Laravel

Guida su come installare Laravel su Windows e Mac

In questo articolo, ti illustrerò tre metodi per installare Laravel sia su Mac che su Windows

Immagine in Evidenza per l'articolo Cos’è Laravel e come funziona
Laravel

Cos’è Laravel e come funziona

I prerequisiti obbligatori per una comprensione ottimale della logica del framework php più popolare del momento.

Immagine in Evidenza per l'articolo Laravel Pint - Facile e veloce come bere una pinta
Laravel

Laravel Pint - Facile e veloce come bere una pinta

Laravel Pint è un “code style fixer” cucito su misura per Laravel, è open source, è basato sul progetto PHP-CS-Fixer e con zero dipendenze da installare.