Novità introdotte da Laravel 13

Laravel 13, rilasciato il 17 marzo 2026 e annunciato da Taylor Otwell durante il Laracon EU 2026, prosegue la cadenza annuale del framework con un'attenzione particolare ai flussi di lavoro AI-native, a default più solidi e ad API per gli sviluppatori più espressive. A differenza di alcune release del passato, Laravel 13 si presenta come un upgrade dall'impatto contenuto sul codice esistente: la maggior parte delle applicazioni Laravel 12 può essere aggiornata senza modifiche sostanziali. Tuttavia, dietro questa apparente continuità, si nascondono novità di rilievo che ridefiniscono il modo in cui costruiamo applicazioni moderne con PHP.

Requisiti e politica di supporto

La prima novità di natura infrastrutturale riguarda il requisito minimo di PHP, che passa a 8.3. Questo allineamento permette al framework di sfruttare appieno le costanti di classe tipizzate, i miglioramenti alla funzione json_validate(), le ottimizzazioni JIT e il sistema di tipi più maturo introdotto nelle ultime versioni del linguaggio. Le versioni di PHP supportate vanno da 8.3 a 8.5. Per quanto riguarda la politica di supporto, Laravel 13 riceverà bug fix fino al terzo trimestre del 2027 e patch di sicurezza fino al 17 marzo 2028, garantendo così un orizzonte temporale ampio per la pianificazione delle migrazioni.

Laravel AI SDK

La novità più significativa di Laravel 13 è senza dubbio l'introduzione del Laravel AI SDK come componente di prima parte stabile e pronto per la produzione. Si tratta di un'API unificata per la generazione di testo, gli agenti basati su tool-calling, gli embedding, l'audio, le immagini e l'integrazione con i vector store. La filosofia alla base dell'SDK è quella dell'agnosticismo rispetto al provider: il passaggio da un fornitore all'altro, ad esempio da OpenAI ad Anthropic, si riduce alla modifica di un singolo valore di configurazione, senza riscritture del codice applicativo.

Un agente di base può essere interrogato con una singola chiamata, mantenendo la sintassi pulita ed espressiva tipica del framework:

use App\Ai\Agents\SalesCoach;

// Invochiamo l'agente con un prompt in linguaggio naturale
$response = SalesCoach::make()->prompt('Analyze this sales transcript...');

return (string) $response;

Lo stesso SDK consente di generare immagini partendo da prompt testuali, offrendo un'interfaccia coerente con il resto delle facade Laravel:

use Laravel\Ai\Image;

// Generazione di un'immagine a partire da una descrizione testuale
$image = Image::of('A donut sitting on the kitchen counter')->generate();

$rawContent = (string) $image;

Il supporto alla sintesi vocale apre la strada alla creazione di assistenti, narrazioni e funzionalità di accessibilità, anch'essi gestiti attraverso un'API estremamente lineare:

use Laravel\Ai\Audio;

// Sintesi audio a partire da una stringa di testo
$audio = Audio::of('I love coding with Laravel.')->generate();

$rawContent = (string) $audio;

Per i flussi di lavoro orientati alla ricerca semantica e al recupero di informazioni, Laravel 13 integra la generazione di embedding direttamente sulle stringhe attraverso l'helper Str:

use Illuminate\Support\Str;

// Generazione degli embedding direttamente da una stringa
$embeddings = Str::of('Napa Valley has great wine.')->toEmbeddings();

Ricerca semantica e vettoriale

Strettamente collegata all'AI SDK è la nuova capacità di eseguire ricerche semantiche e vettoriali in modo nativo. Laravel 13 estende il query builder con clausole di similarità che si appoggiano a PostgreSQL e all'estensione pgvector, rendendo la costruzione di esperienze di ricerca AI-powered un'operazione idiomatica all'interno del framework.

use Illuminate\Support\Facades\DB;

// Ricerca per similarità semantica direttamente dal query builder
$documents = DB::table('documents')
    ->whereVectorSimilarTo('embedding', 'Best wineries in Napa Valley')
    ->limit(10)
    ->get();

Il punto di forza di questa implementazione è l'integrazione tra la generazione degli embedding fornita dall'AI SDK e l'esecuzione delle query: il developer non deve più orchestrare manualmente la conversione delle stringhe in vettori e la successiva ricerca, perché il framework si occupa di entrambi i passaggi in modo trasparente.

JSON:API Resources

Laravel 13 introduce il supporto di prima parte per la specifica JSON:API attraverso una nuova famiglia di resource class. Queste classi gestiscono in modo automatico la serializzazione degli oggetti risorsa, l'inclusione delle relazioni, gli sparse fieldset, i link e gli header di risposta conformi alla specifica. Il risultato è un notevole risparmio di codice boilerplate per chi progetta API pubbliche o interfacce dati che necessitano di standardizzazione.

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\JsonApi\JsonApiResource;

// La risorsa eredita dalla classe specifica per JSON:API
class PostResource extends JsonApiResource
{
    // Definiamo gli attributi serializzabili
    protected array $attributes = ['title', 'body', 'published_at'];

    // Le relazioni incluse possono essere dichiarate esplicitamente
    protected array $relationships = ['author', 'comments'];
}

Protezione contro la richiesta forgery

Sul fronte della sicurezza, il middleware di protezione contro le richieste contraffatte è stato potenziato e formalizzato sotto il nome di PreventRequestForgery. La novità principale è l'introduzione della verifica origin-aware delle richieste, che si affianca al tradizionale meccanismo di protezione basato su token CSRF senza romperne la compatibilità. Questo approccio multilivello rafforza la difesa contro le richieste cross-origin malevole, mantenendo al tempo stesso la retrocompatibilità con tutte le applicazioni esistenti.

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;
use Illuminate\Foundation\Http\Middleware\PreventRequestForgery;

class Kernel extends HttpKernel
{
    // Il nuovo middleware sostituisce il precedente VerifyCsrfToken
    protected $middlewareGroups = [
        'web' => [
            // ... altri middleware del gruppo web
            PreventRequestForgery::class,
        ],
    ];
}

Queue Routing per classe

La gestione delle code beneficia dell'introduzione del queue routing per classe attraverso il nuovo metodo Queue::route(...). Questa funzionalità permette di definire centralmente le regole di instradamento di default per code e connessioni associate a specifici job, evitando la dispersione di queste informazioni all'interno delle classi job stesse o nei punti in cui i job vengono dispatchati.

use App\Jobs\ProcessPodcast;
use Illuminate\Support\Facades\Queue;

// Instradamento centralizzato del job verso una connessione e una coda specifiche
Queue::route(ProcessPodcast::class, connection: 'redis', queue: 'podcasts');

Questa configurazione viene tipicamente collocata in un service provider, garantendo che ogni dispatch del job rispetti le regole definite senza necessità di specificarle ogni volta esplicitamente.

Espansione degli attributi PHP

Laravel 13 prosegue il percorso, già intrapreso nelle versioni precedenti, di adozione degli attributi PHP nativi come meccanismo dichiarativo per configurare il comportamento delle classi. La release amplia in modo significativo la copertura di queste annotazioni, introducendo nuovi attributi per i controller, l'autorizzazione, le code, gli eventi, le notifiche, la validazione, il testing e la serializzazione delle risorse.

Tra le novità più rilevanti troviamo gli attributi #[Middleware] e #[Authorize] applicabili sia a livello di classe che di metodo, che permettono di colocare le concerns trasversali direttamente con il codice cui si riferiscono:

<?php

namespace App\Http\Controllers;

use App\Models\Comment;
use App\Models\Post;
use Illuminate\Routing\Attributes\Controllers\Authorize;
use Illuminate\Routing\Attributes\Controllers\Middleware;

// Middleware applicato a livello di classe
#[Middleware('auth')]
class CommentController
{
    // Middleware aggiuntivo e controllo di autorizzazione a livello di metodo
    #[Middleware('subscribed')]
    #[Authorize('create', [Comment::class, 'post'])]
    public function store(Post $post)
    {
        // Logica di creazione del commento
    }
}

Sul versante delle code, sono stati introdotti attributi specifici per controllare il comportamento dei job in modo dichiarativo. Tra questi spiccano #[Tries] per il numero massimo di tentativi, #[Backoff] per la strategia di attesa tra i tentativi, #[Timeout] per il limite di esecuzione e #[FailOnTimeout] per stabilire il fallimento immediato in caso di timeout.

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\Attributes\Backoff;
use Illuminate\Queue\Attributes\FailOnTimeout;
use Illuminate\Queue\Attributes\Timeout;
use Illuminate\Queue\Attributes\Tries;

// Configurazione completa del job tramite attributi
#[Tries(5)]
#[Backoff([10, 30, 60])]
#[Timeout(120)]
#[FailOnTimeout]
class ProcessPayment implements ShouldQueue
{
    use Queueable;

    public function handle(): void
    {
        // Esecuzione del pagamento
    }
}

Estensione del TTL della cache

Una piccola ma utile aggiunta è il metodo Cache::touch(...), che consente di prolungare il TTL di un elemento già presente in cache senza dover effettuare una lettura seguita da una nuova scrittura. Questa operazione, oltre a essere più sintetica, riduce il numero di round trip verso il backend di cache e si rivela particolarmente preziosa in scenari ad alta frequenza, come il rinnovo di token di sessione o di chiavi di rate limiting.

use Illuminate\Support\Facades\Cache;

// Estendiamo il TTL di una chiave esistente senza recuperarne il valore
Cache::touch('user:1234:session', now()->addMinutes(30));

Strategia di adozione

L'aggiornamento a Laravel 13 si presenta come un'operazione a basso rischio per la stragrande maggioranza delle applicazioni esistenti. Il principale ostacolo, paradossalmente, non è interno al framework ma riguarda l'infrastruttura: la necessità di disporre di PHP 8.3 o superiore. Una volta soddisfatto questo requisito, il percorso di migrazione è generalmente lineare e può essere automatizzato in larga parte attraverso strumenti come Laravel Shift. I principali pacchetti dell'ecosistema, tra cui Livewire, Inertia, Filament e la famiglia Spatie, sono già compatibili con la nuova versione.

L'adozione delle nuove funzionalità, in particolare dell'AI SDK e della ricerca vettoriale, può avvenire in modo incrementale: sono tutte feature opzionali che convivono pacificamente con il codice esistente. Questa è probabilmente la lezione più importante di Laravel 13: una release può essere significativa senza essere disruptive, offrendo nuove capacità senza imporre riscritture. Il framework continua così a coniugare stabilità e innovazione, confermandosi come una delle scelte più solide per lo sviluppo web in PHP nel 2026 e oltre.