Dopo una lunga attesa, finalmente è stata rilasciata la tanto attesa versione 11 di Laravel, che porta con sé una serie di nuove funzionalità mirate a potenziarne le prestazioni e l'usabilità del framework PHP. Questo aggiornamento rappresenta un passo significativo nel continuo sviluppo e miglioramento del progetto, ampliando le sue capacità e offrendo agli sviluppatori nuovi strumenti per creare applicazioni web efficienti e moderne.
Laravel 11: le novità
Laravel 11 è il risultato dei miglioramenti introdotti nella serie 10.x di Laravel. Questa versione presenta una struttura applicativa semplificata, limitazione della velocità al secondo, routing dell'integrità, rotazione continua delle chiavi di crittografia e funzionalità aggiornate di test delle code. Inoltre, include il trasporto della posta di nuovo invio, integrazione con il validatore Prompt e introduce nuovi comandi Artisan, tra altri miglioramenti significativi.
Un'aggiunta rilevante è l'introduzione di Laravel Reverb, un server WebSocket scalabile che offre potenti funzionalità in tempo reale per le tue applicazioni. Di seguito esamineremo dettagliatamente ciascuna delle funzionalità sopra menzionate.
Applicazione semplificata
Laravel 11 introduce una struttura applicativa semplificata per le nuove applicazioni Laravel, senza richiedere alcuna modifica alle applicazioni esistenti. Questa nuova struttura mira a offrire un'esperienza più snella e moderna.
Il file di bootstrap dell'applicazione, bootstrap/app.php
, è stato rivitalizzato come file di configurazione dell'applicazione code-first. Ora è possibile personalizzare il routing, il middleware, i fornitori di servizi, la gestione delle eccezioni e altro ancora direttamente da questo file.
Per quanto riguarda i fornitori di servizi, Laravel 11 include solo un singolo fornitore di servizi, AppServiceProvider
, anziché la struttura predefinita con cinque fornitori di servizi. Le funzionalità dei fornitori di servizi precedenti sono state integrate nel file bootstrap/app.php
, che viene gestito automaticamente dal framework o può essere esplicitamente inserito nel file AppServiceProvider
.
Inoltre, per quanto riguarda le API di attivazione e il routing broadcast, i file api.php
e channels.php
non sono più inclusi per impostazione predefinita, poiché molte applicazioni non ne fanno uso. Comunque all'occorrenza possono sempre essere creati tramite i seguenti comandi Artisan:
php artisan install:api
php artisan install:broadcasting
I Middleware
Nelle versioni precedenti di Laravel, le applicazioni includevano nove middleware standard. Con l'avvento di Laravel 11, questi middleware sono stati integrati direttamente nel framework stesso, evitando così di aggiungere ulteriore volume alla struttura dell'applicazione.
Il file bootstrap/app.php
è ora il fulcro per richiamare i nuovi metodi che permettono di personalizzare il comportamento di questi middleware, offrendo agli sviluppatori maggiore flessibilità e controllo sulle operazioni degli stessi all'interno delle loro applicazioni Laravel.
Possono essere richiamati dal file stesso:
->withMiddleware(function (Middleware $middleware) {
$middleware->validateCsrfTokens(
except: ['stripe/*']
);
$middleware->web(append: [
EnsureUserIsSubscribed::class,
])
})
Scheduling (la pianificazione)
Con l'introduzione della nuova facade Schedule in Laravel, le attività pianificate possono essere definite direttamente nel file dell'applicazione routes/console.php
. Questo nuovo approccio elimina la necessità di avere una classe "kernel" della console separata, semplificando così la gestione e la configurazione delle attività programmate all'interno del framework Laravel.
Prima di questa novità, le attività pianificate venivano gestite attraverso la classe "kernel" della console, che richiedeva una configurazione aggiuntiva e una struttura specifica. Ora, grazie alla facade Schedule, gli sviluppatori possono definire le attività direttamente nel file console.php
, rendendo il processo più intuitivo e snello.
Questo cambiamento non solo semplifica il codice e la configurazione dell'applicazione ma migliora anche l'esperienza dello sviluppatore, consentendo di concentrarsi direttamente sulle attività da pianificare senza dover gestire strutture aggiuntive. In definitiva, l'utilizzo della nuova facade Schedule rappresenta un passo avanti nell'ottimizzazione della gestione delle attività pianificate all'interno delle applicazioni Laravel:
use Illuminate\Support\Facades\Schedule;
Schedule::command('emails:send')->daily();
Gestione delle eccezioni (Exception Handling) in LAravel 11
In Laravel 11, è possibile personalizzare la gestione delle eccezioni direttamente dal file di configurazione dell'applicazione bootstrap/app.php
, anziché utilizzare una classe separata per gestire le eccezioni. Questa modifica riduce il numero complessivo di file inclusi in una nuova applicazione Laravel, semplificando così la struttura e rendendo il codice più gestibile.
In precedenza, la gestione delle eccezioni richiedeva l'utilizzo di una classe dedicata per i diversi scenari di eccezione. Con l'integrazione della gestione delle eccezioni nel file di bootstrap dell'applicazione, gli sviluppatori possono ora concentrarsi sulla definizione delle regole e delle azioni da intraprendere in caso di eccezioni, direttamente nel contesto dell'applicazione principale.
Questa modifica non solo semplifica la struttura dell'applicazione, ma favorisce anche una maggiore coerenza nel codice, in quanto tutte le configurazioni legate alle eccezioni sono gestite in un unico punto. Questo approccio aiuta gli sviluppatori a mantenere il controllo e la chiarezza nel trattamento delle eccezioni, contribuendo a una migliore esperienza di sviluppo e manutenzione delle applicazioni Laravel:
->withExceptions(function (Exceptions $exceptions) {
$exceptions->dontReport(MissedFlightException::class);
$exceptions->report(function (InvalidOrderException $e) {
// ...
});
})
Impostazioni predefinite dell'applicazione
Quando si crea una nuova applicazione Laravel, è importante notare che il framework è stato progettato per offrire una configurazione iniziale fluida e senza intoppi. Questo si riflette nelle impostazioni predefinite dell'applicazione, che includono l'uso di SQLite come sistema di archiviazione del database. SQLite è una scelta eccellente per lo sviluppo iniziale in quanto richiede poche configurazioni, senza l'installazione di software aggiuntivo come server SQL separati.
Inoltre, Laravel configura automaticamente il driver di database per gestire le sessioni, la cache e la coda delle attività all'interno dell'applicazione. Questo significa che non è necessario preoccuparsi di configurazioni complesse o di dover installare ulteriori pacchetti per iniziare lo sviluppo. È possibile concentrarsi direttamente sulla scrittura del codice e sulla creazione delle funzionalità dell'applicazione senza perdere tempo su dettagli tecnici di basso livello.
Questa scelta di impostazioni predefinite mira a ottimizzare il processo di sviluppo iniziale, consentendo agli sviluppatori di essere operativi in pochissimo tempo e di concentrarsi sulle logiche e le funzionalità dell'applicazione stessa, invece che sulla configurazione dell'ambiente di sviluppo.
Laravel Reverb
Laravel Reverb rappresenta un passo avanti significativo nel mondo delle comunicazioni in tempo reale per le applicazioni Laravel. Questa innovativa tecnologia introduce comunicazioni WebSocket estremamente veloci e scalabili direttamente nell'ambiente di sviluppo Laravel, offrendo un'esperienza di integrazione fluida con la già consolidata suite di strumenti di trasmissione eventi di Laravel, come Laravel Echo.
Immagina di dover implementare funzionalità di chat in tempo reale o aggiornamenti immediati delle informazioni per gli utenti della tua applicazione. Grazie a Laravel Reverb, questo processo diventa molto più efficiente e potente. Le comunicazioni WebSocket consentono una connessione persistente e bidirezionale tra il client e il server, consentendo scambi di dati immediati e continuativi senza la necessità di richieste HTTP ripetute.
Inoltre, la naturale integrazione con Laravel Echo, un potente strumento per la trasmissione degli eventi in tempo reale, rende l'utilizzo di Laravel Reverb ancora più vantaggioso. Con poche righe di codice, è possibile gestire in modo elegante e robusto la comunicazione in tempo reale tra il backend Laravel e il frontend, offrendo agli sviluppatori una soluzione completa per le esigenze di comunicazione in real time delle moderne applicazioni web.
Laravel Reverb non solo accelera lo sviluppo di funzionalità avanzate di comunicazione in tempo reale, offre anche una base solida e scalabile per gestire carichi di lavoro intensi, mantenendo al contempo la flessibilità e la facilità d'uso tipiche del framework. È un'aggiunta preziosa per gli sviluppatori che cercano di offrire esperienze interattive e dinamiche ai propri utenti, senza compromettere le prestazioni e la stabilità dell'applicazione:
php artisan reverb:start
Limitazione della velocità al secondo
Con l'ultima versione di Laravel, è stato introdotto un importante miglioramento nella gestione della limitazione della velocità. Supportando ora la granularità "al secondo" per tutti i limitatori di velocità, inclusi quelli per le richieste HTTP e i lavori in coda. Questa novità rappresenta un significativo passo avanti rispetto alla precedente limitazione "al minuto" presente nei limitatori di velocità di Laravel.
Immagina di dover gestire un'applicazione web con picchi di traffico intensi o di dover controllare la frequenza delle richieste a risorse critiche. Grazie a questa nuova funzionalità, è possibile impostare limitazioni più precise e reattive, garantendo una migliore gestione delle risorse e una maggiore stabilità dell'applicazione.
Ad esempio, se desideri limitare il numero di richieste a una determinata API o risorsa a una velocità di una richiesta al secondo, Laravel ora offre questa possibilità nativamente, senza la necessità di soluzioni complesse o personalizzate.
Questa miglioria non solo offre maggiore flessibilità agli sviluppatori nel gestire il traffico e le risorse, contribuisce anche a ottimizzare le prestazioni complessive dell'applicazione, garantendo una distribuzione più uniforme delle richieste nel tempo. Si tratta sicuramente di un aggiornamento che renderà le applicazioni Laravel più robuste e pronte per gestire carichi di lavoro dinamici e impegnativi.
RateLimiter::for('invoices', function (Request $request) {
return Limit::perSecond(1);
});
Cambiare la chiave di crittografia con Laravel 11
In passato, nel cambiare la chiave di crittografia in un'applicazione Laravel, si verificava la disconnessione di tutti gli utenti e diventava impossibile decrittografare i dati crittografati con la chiave precedente.
Con l'introduzione di Laravel 11, è ora possibile definire un elenco delle chiavi di crittografia precedenti dell'applicazione utilizzando la variabile di ambiente APP_PREVIOUS_KEYS
, separando le chiavi con una virgola.
Durante l'operazione di crittografia dei dati, Laravel utilizzerà sempre la chiave "corrente" specificata nella variabile di ambiente APP_KEY
. Quando si decrittografano i dati, Laravel proverà prima con la chiave corrente. Se la decrittografia non riesce con la chiave corrente, Laravel passerà a tutte le chiavi precedenti fino a trovare una chiave in grado di decrittografare i dati.
Grazie a questo approccio graduale di decrittografia, gli utenti possono continuare a utilizzare l'applicazione senza interruzioni anche dopo aver ruotato le chiavi di crittografia. Questa funzionalità garantisce una transizione fluida e sicura nella gestione delle chiavi di crittografia, migliorando la sicurezza complessiva dell'applicazione senza compromettere l'esperienza degli utenti.
Il testing dell'interazione con le code
In passato, verificare manualmente se un lavoro in coda fosse stato rilasciato, eliminato o fallisse era complicato e richiedeva la definizione di falsi e stub personalizzati per le code. Tuttavia, in Laravel 11, puoi facilmente testare queste interazioni con le code utilizzando il metodo withFakeQueueInteractions
.
Questo nuovo metodo semplifica il processo di testing, consentendoti di verificare in modo efficiente e accurato le interazioni con le code all'interno delle applicazioni Laravel. Non è più necessario creare manualmente falsi e stub complessi per simulare tali scenari, rendendo il testing delle code più veloce e meno laborioso. Con questa nuova funzionalità puoi concentrarti maggiormente sul testing della logica di business di un'applicazione. Senza preoccuparti dei dettagli implementativi dei test delle code:
use App\Jobs\ProcessPodcast;
$job = (new ProcessPodcast)->withFakeQueueInteractions();
$job->handle();
$job->assertReleased(delay: 60);
La funzione once
La funzione helper once
esegue il callback fornito e memorizza il risultato in memoria per tutta la durata della richiesta. Qualsiasi chiamata successiva alla funzione once
con lo stesso callback restituirà il risultato memorizzato in precedenza:
function random(): int
{
return once(function () {
return random_int(1, 1000);
});
}
random(); // 123
random(); // 123 (cached result)
random(); // 123 (cached result)
Nuovi comandi Artisan in LAravel 11
In Laravel 11 vengono introdotti nuovi comandi Artisan per velocizzare il flusso di lavoro, essi consentono di creare nuove Classi, Traits, interfacce ed enum:
php artisan make:class
php artisan make:enum
php artisan make:interface
php artisan make:trait
Miglioramenti nella gestione del database
Laravel 11 offre metodi aggiuntivi per le operazioni e l'ispezione dello schema del database, compresa la possibilità nativa di modificare, rinominare e eliminare colonne. Inoltre, vengono forniti tipi avanzati di dati spaziali, nomi di schema non predefiniti e metodi di schema nativi per manipolare tabelle, viste, colonne, indici e chiavi esterne:
Questo significa che gli sviluppatori possono gestire in modo più completo e preciso la struttura del database direttamente da Laravel, senza dover ricorrere a soluzioni esterne o personalizzate. La possibilità di eseguire operazioni avanzate come la modifica, la rinominazione e l'eliminazione delle colonne nativamente semplifica e accelera lo sviluppo delle applicazioni. Inoltre, l'introduzione di tipi di dati spaziali avanzati arricchisce le capacità di gestione dei dati geografici all'interno delle applicazioni.
L'aggiunta di metodi nativi per manipolare tabelle, viste, colonne, indici e chiavi esterne offre maggiore controllo e flessibilità nella gestione dello schema del database. Queste nuove funzionalità si traducono in un'esperienza di sviluppo più efficiente e in applicazioni Laravel più robuste e scalabili:
use Illuminate\Support\Facades\Schema;
$tables = Schema::getTables();
$views = Schema::getViews();
$columns = Schema::getColumns('users');
$indexes = Schema::getIndexes('users');
$foreignKeys = Schema::getForeignKeys('users');
In conclusione
In sintesi, Laravel 11 introduce miglioramenti significativi che semplificano e potenziano lo sviluppo delle applicazioni web. Le nuove funzionalità includono la gestione avanzata delle operazioni sullo schema del database, l'introduzione di tipi di dati spaziali e l'ottimizzazione delle comunicazioni in tempo reale tramite Laravel Reverb. Questi aggiornamenti consentono agli sviluppatori di creare applicazioni più efficienti, scalabili e sicure, offrendo una migliore esperienza agli utenti finali. Con il supporto nativo per varie operazioni di base e avanzate, Laravel 11 si conferma come un potente framework per lo sviluppo di applicazioni web moderne.