Prima di iniziare a parlare delle novità di Laravel 9, vogliamo fare una piccola premessa per l’introduzione di questo articolo.
Questo primo articolo, di natura prettamente tecnica, inaugura quella che sarà una serie informativa dedicata a sviluppatori professionali e non. Speriamo che condividendo le nostre esperienze si possa contribuire a migliorare la cultura professionale e, perché no, creare un network per la condivisione di idee nell’ambito dello sviluppo web.
Tolta di mezzo questa premessa, il prossimo 8 Febbraio uscirà la nona versione del framework che ha innegabilmente cambiato le carte in gioco nell’ambito dello sviluppo back-end su PHP.
Rilasciato nel 2011 da Taylor Otwell ed oggi mantenuto da un team remoto di 7 sviluppatori (cui, dagli ultimi rumors, si aggiungerà a breve un ulteriore acquisto) quest’anno Laravel compie 11 anni.
In Comodolab il primo progetto basato su Laravel rilasciato in produzione risale a inizio 2015.
Sette anni in cui abbiamo imparato ad amarne i pregi e a limarne quelli che secondo noi ne sono i difetti. Nel suo piccolo, il nostro team ha inoltre contribuito ad un paio di funzionalità minori che sono tutt’ora parte integrante del core della piattaforma.
LE NOVITÀ DI LARAVEL 9
Incremento della versione minima di PHP alla versione 8.0 in linea con l’incremento effettuato sulle dipendenze da pacchetti Symfony.
Un nuovo design per il comando artisan route:list
. Quella che prima era una vista piuttosto confusionale ha ricevuto un notevole make-over che dovrebbe permettere di renderla più chiara ed usabile.
Aggiunta del flag --coverage
al comando artisan test
. Niente che non potesse essere fatto richiamando direttamente ./vendor/bin/phpunit
ma in questo caso trarrà vantaggio dal decoratore e dalle funzionalità aggiuntive fornite dal wrapper artisan (Dovrete comunque usare XDebug o PCOV per generare il coverage).
Migrazioni anonime di default. Per evitare di creare due migrazioni con il medesimo nome di classe, di default le nuove migrazioni ritorneranno una classe anonima mentre il nome del file sarà composto come nelle versioni precedenti.
Una nuova interfaccia per il QueryBuilder. Attualmente in Laravel convivono tre diverse implementazioni del QueryBuilder: Query\Builder
, Eloquent\Builder
e Eloquent\Relation
. Questo poteva creare una certa confusione nel type-hinting dei parametri all’interno delle Closure passate al Builder. Ora grazie alla nuova interfaccia dedicata non dovremo più preoccuparci di sbagliare la corretta implementazione.
Da SwiftMailer a Symfony Mailer. La libreria SwiftMailer, fedele amica e nemica di tutti questi anni di mailing non è più mantenuta per cui scelta doverosa quella di sostituirla con Symfony Mailer. Nonostante ci sia da essere più che contenti di averne un’implementazione più moderna, questo aggiornamento darà numerosi grattacapi a chi ha dovuto personalizzare l’esperienza di Mailing su Laravel andando ad interagire direttamente con il Mailer sottostante. Per i più, invece, la migrazione dovrebbe essere indolore.
Aggiornamento di Flysystem alla versione 3. La libreria per l’accesso al file system (sviluppata da Frank de Jonge che seguiamo volentieri su Twitter non solo per le immense capacità tecniche ma anche per la grande simpatia), alla base della facade Storage
, raggiunge la terza versione, qua le novità.
Nuovi Getters/Setters in Eloquent. Nonostante il linguaggio PHP attualmente non permetta di impostare getters e setters, Laravel ha da sempre dato la possibilità di utilizzarli all’interno dei Modelli Eloquent sotto il nome di Accessors e Mutators . Da oggi abbiamo una nuova sintassi, davvero espressiva, per poterli configurare.
use Illuminate\Database\Eloquent\Casts\Attribute;
public function name(): Attribute
{
return new Attribute(
get: fn ($value) => strtoupper($value),
set: fn ($value) => $value,
);
}
Se da una parte ci piace la nuova sintassi dobbiamo comunque valutare se non abbia delle ripercussioni negative cui potremmo non avere ancora pensato. Magari un buon argomento per un prossimo articolo.
Route binding degli Enums. Laravel 9 supporterà da subito l’uso degli Enums (una delle novità più interessanti di PHP 8.1). In tal senso sarà possibile utilizzare gli Enums all’interno delle rotte con tanto di validazione del valore passato e restituzione di un errore 404 (Not found) in caso di valori non validi.
enum Color: string { case Green = 'green'; case Blue = 'blue'; } Route::get( '/shirts/colors/{color}', fn (Color $color) => Shirts::where('color', $color->value)->get(); );
Casting degli Enum dalle proprietà dei modelli. Possibilità di definire il cast dei tipi Enum direttamente dall’array $casts
dei modelli Eloquent.
Ricerca Full Text con MySql e PostgreSQL. Finalmente sarà possibile definire indici Full Text nelle migrazioni nonché effettuare query where su tali indici tramite il metodo whereFullText
.
Driver database per Laravel Scout. Se in passato implementare anche una semplice ricerca basata su LIKE diventava facilmente un incubo, grazie a questo driver l’implementazione di un motore di ricerca per bassi carichi di lavoro dovrebbe essere meno onerosa. Questa è un’altra di quelle funzionalità che ancora non abbiamo testato ma siamo curiosi di sostituire questo driver a precedenti implementazioni basate su Meilisearch o Algolia.
Possibilità di renderizzare stringhe Blade a runtime. Implementazione per niente banale che ci permetterà di utilizzare il linguaggio di template Blade al di fuori delle nostre viste .blade.php
.
Direttive blade per @checked e @selected. Helpers utilissimi per contrassegnare checkbox e options come selezionati all’interno delle viste.
Paginazione per Bootstrap 5. Ultimamente in Comodolab stiamo sempre più spesso utilizzando Tailwind CSS per stilizzare le nostre pagine ma Bootstrap è stato un fedele compagno che ha assolutamente senso supportare nel 2022.
Validazione di array annidate. Non tutti lo sanno ma è sempre stato possibile validare array annidate tramite il carattere jolly * (ex. 'shirts.*.color' => [new Enum(Color::class)]
). Grazie però al nuovo metodo Rule::forEach
sarà possibile ciclare tutti i valori e passarli tramite una closure che ritornerà a sua volta un’array di regole.
Nuova modalità API per Laravel Breeze. Per chi voglia utilizzare un frontend Javascript questa è un ottima notizia. Tramite questo scaffolding sarà molto più veloce avviare un nuovo progetto.
Nuova pagina di debug delle eccezioni. Personalmente adoro le Exceptions. Venendo dal contesto di WordPress in cui fare il debug degli errori richiedeva spesso qualche conoscenza di magia nera, la semplicità con cui un eccezione risale il codice fino ad arrivare ad un handler, portandosi dietro lo stack che l’ha generata ha qualcosa di meraviglioso. Il restyling grafico di Ignition, pagina di debug delle Exceptions di Laravel, non può che migliorare la situazione.
Soketi server per Echo. Un nuovo driver per integrare Soketi (soluzione websocket basata su Node.js) tramite Laravel Echo.
Supporto per i generics sulle Collections. Finalmente il vostro IDE sarà in grado di interpretare correttamente il tipo di ritorno dei metodi get sulle Collections. Questa è una di quelle novità per cui non vedo l’ora di aggiornare! Finalmente PhpStorm smetterà di lamentarsi di tipi incoerenti ogni volta che abbiamo a che fare con le Collections.
CONCLUSIONE
Nonostante abbiamo già compilato una bella lista, in realtà abbiamo volutamente tralasciato alcune novità minori relative ad helpers ed altri frangenti che ci sono sembrati meno significativi. A questo indirizzo potete già trovare la lista completa di tutte le novità di Laravel 9.
TI è piaciuto l’articolo?
[ISCRIVITI alla Newsletter per continuare a ricevere informazioni utili e interessanti]