Vai al contenuto principale
A giugno 2026 Laravel Cloud ha iniziato a supportare le app Symfony e a Forge sono stati aggiunti cache Valkey gestita e object storage. Al framework sono arrivati aggiornamenti sostanziosi, tra cui bulk dispatch di job, supporto al pooler Postgres e client/server MCP. Fonte: Laravel June Product Updates

Laravel Framework

Bus::bulk() — dispatch di job in bulk

Ora puoi registrare grandi quantità di job con una sola INSERT nel database. La INSERT in bulk viene eseguita per ciascuna coda/connessione, eliminando il costo di INSERT una a una.
use Illuminate\Support\Facades\Bus;

Bus::bulk([
    new ProcessOrder($order1),
    new ProcessOrder($order2),
    new ProcessOrder($order3),
    // Efficiente anche con migliaia di elementi
]);

Supporto al transaction pooler di Postgres

Il supporto ai connection pool Postgres in modalità transaction, come PgBouncer, AWS RDS Proxy e Neon, è stato aggiunto a livello di framework.
// config/database.php
'pgsql' => [
    'driver' => 'pgsql',
    'pooled' => true,  // Dichiara la connessione via pooler
    // ...
],
Se hai bisogno di una connessione diretta, per esempio per operazioni sullo schema o istruzioni DDL, aggiungi ::direct al nome della connessione per bypassare il pooler. DB::connection('pgsql::direct')->statement('CREATE INDEX ...')
Il framework esegue automaticamente emulated prepares, il binding dei boolean e tutte le altre operazioni richieste dal pooler.

Supporto ai tool client e server MCP

Gli agenti Laravel AI possono ora utilizzare tool di server MCP remoti (via HTTP) e di classi server MCP locali. Trasformazioni di schema, wrapping e chiamate sono gestite in modo automatico.
class MyAgent extends Agent
{
    public function tools(): array
    {
        return [
            // Usa i tool di un server MCP remoto
            McpClient::tools('https://mcp.example.com'),
            // Usa i tool di un server MCP locale
            McpServer::tools(MyMcpServer::class),
        ];
    }
}

Comando artisan dev

È stato aggiunto artisan dev che avvia con un solo comando tutti i processi di sviluppo. Server, queue worker, log tailing e Vite girano contemporaneamente, ciascuno con output color-coded.
php artisan dev
// Registra comandi aggiuntivi in un service provider
use Illuminate\Foundation\Console\DevCommands;

DevCommands::artisan('reverb:start', 'reverb')->orange();
DevCommands::register('stripe listen --forward-to ' . config('app.url'))->green();
Rileva automaticamente il package manager di Node.js (npm, yarn, pnpm, bun). È la convenzione ufficiale di Artisan che sostituisce il tradizionale script composer dev.

Supporto ai metadati di rotta

È stato aggiunto il metodo ->metadata() che permette di aggiungere metadati arbitrari a una rotta. È pienamente compatibile con la cache delle rotte e i metadati impostati su un gruppo vengono mergiati alle rotte figlie.
Route::metadata(['head' => ['robots' => ['noindex'], 'author' => 'Taylor']])
    ->group(function () {
        Route::get('/users', [UserController::class, 'index'])
            ->metadata(['head' => ['title' => 'Users']]);
    });

// Accesso da controller e middleware
$request->route()->getMetadata('head.title');          // 'Users'
$request->route()->getMetadata('head.author', 'Taylor'); // 'Taylor'

Handler di eccezioni non ritentabili

Per le eccezioni che non ha senso ritentare (input non validi, guasti esterni permanenti, ecc.), puoi sopprimere il retry.
// Definisci direttamente sulla classe di eccezione
class InvalidInputException extends RuntimeException
{
    public function retry(): bool
    {
        return false;
    }
}

// Puoi configurarlo anche in bootstrap/app.php
->withExceptions(function (Exceptions $exceptions) {
    $exceptions->dontRetry(InvalidInputException::class);
})

Flag —without-migration-data per schema:dump

Ora schema:dump può generare un dump strutturale puro che omette le righe della tabella delle migration.
php artisan schema:dump --without-migration-data

Correzione dei fusi orari per between()/unlessBetween()

between() e unlessBetween() ora funzionano nella schedule con il fuso orario corretto indipendentemente dall’ordine in cui timezone() viene chiamato.
// Entrambe si comportano allo stesso modo (prima, se scrivevi between prima, veniva usato UTC)
$schedule->command('foo')->timezone('Europe/Rome')->between('10:00', '12:00');
$schedule->command('foo')->between('10:00', '12:00')->timezone('Europe/Rome');

Altre modifiche al framework

  • Supporto ai trait di Bus::bulk(): puoi definire attributi di coda nei trait
  • Indici vettoriali per MariaDB: supporto agli indici vettoriali in MariaDB
  • Helper attachFromStorage(): aggiunge allegati dallo storage al MailMessage delle notifiche
  • Cache::rememberWithState(): supporto a una cache con stato
  • Driver di maintenance mode per test paralleli: con il driver array ogni processo può avere il proprio stato di manutenzione
  • whenFilledEnum(): elaborazione condizionale di campi usando Enum
  • Supporto anyOf di JSON Schema: si può usare anyOf di JSON Schema in validazione

Inertia

  • Client\Request::uri(): ottiene l’URI della richiesta client
  • Supporto all’attributo target dell’anchor: nel componente <Link> è ora usabile target="_blank" e simili
  • Opzione async del form: il componente form supporta l’invio asincrono
  • Informazioni sulla pagina in titleCallback: alla callback del titolo vengono passati i dati della pagina

Laravel Cloud e Laravel Forge

ProdottoAggiornamenti principali
Laravel CloudSupporto completo alle app Symfony (Symfony 7.4 LTS e 8.x, PHP da 8.2 a 8.5), deploy e pagamento da Stripe Projects, configurazione delle notifiche Slack/email per singolo membro del team
Laravel ForgeCache Valkey gestita (creazione e gestione da dashboard), object storage gestito, redesign delle email di notifica
Ultima modifica il 13 luglio 2026