Passer au contenu principal
En avril 2026, l’authentification sans mot de passe full-stack est devenue une fonctionnalité standard de Laravel, et de nombreuses fonctionnalités pratiques ont été ajoutées : jobs Debounceable pour maîtriser les rafales de dispatch, prise en charge des MCP UI Apps, etc. Source : Laravel April Product Updates

Laravel Framework

Jobs Debounceable en file d’attente

Une solution propre pour les charges de travail en rafale. Avec l’attribut #[DebounceFor], plusieurs dispatchs dans un intervalle donné sont regroupés en un seul, et seul le dernier est exécuté. C’est l’inverse de ShouldBeUnique : cela optimise les mises à jour successives dans une fenêtre de debounce.
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\Attributes\DebounceFor;

#[DebounceFor(30)]
class RebuildSearchIndex implements ShouldQueue
{
    // Même si un utilisateur met à jour un document 10 fois en 30 secondes,
    // la reconstruction de l'index n'est exécutée qu'une seule fois
}

// Debounce également possible côté appelant (sans modifier la classe)
RebuildSearchIndex::dispatch()->debounceFor(seconds: 30);
Les jobs mis en debounce déclenchent l’événement JobDebounced, ce qui permet de visualiser les jobs ignorés.

Réponse JSON pour la route de santé

Pour les applications purement API, plus besoin de scraper le HTML de /up. La route de santé intégrée renvoie désormais du JSON en réponse à une requête JSON.
{ "status": "Application is up" }
L’intégration avec load balancers, moniteurs d’uptime et orchestrateurs devient plus simple. Aucune modification de configuration n’est nécessaire.

JsonFormatter

Grâce à JsonFormatter, les données context() des exceptions personnalisées sont désormais consignées de façon fiable dans les logs structurés. Le contexte des exceptions précédentes dans la chaîne d’exceptions est également inclus.
// config/logging.php
'formatter' => Illuminate\Log\Formatters\JsonFormatter::class,

prefersJsonResponses()

Il suffit d’ajouter une ligne dans bootstrap/app.php pour qu’une application API traite un en-tête Accept large comme du JSON : redirections d’authentification, erreurs de validation et pages d’exception sont sérialisées correctement pour le client.
return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(...)
    ->prefersJsonResponses()
    ->create();

Prise en charge de Cloudflare Email Service

Le service Email de Cloudflare est désormais officiellement pris en charge comme mailer Laravel.
// config/services.php
'cloudflare' => [
    'account_id' => env('CLOUDFLARE_ACCOUNT_ID'),
    'token' => env('CLOUDFLARE_TOKEN'),
],

Prise en charge complète de Redis Cluster

Les erreurs CROSSSLOT dans les environnements Redis Cluster tels qu’AWS ElastiCache Serverless sont résolues. Lorsque la queue Laravel et le ConcurrencyLimiter détectent une connexion Cluster, ils encapsulent automatiquement le nom de la queue avec un hash tag.
queues:{default}          # slot "default"
queues:{default}:delayed  # même slot
queues:{default}:reserved # même slot

Méthodes d’inspection des jobs Queue

Trois méthodes ont été ajoutées pour inspecter le contenu des jobs sans consulter directement la base de données.
Queue::pendingJobs();   // Jobs en attente
Queue::delayedJobs();   // Jobs différés
Queue::reservedJobs();  // Jobs en cours de traitement

// Accès à l'instance InspectedJob
Queue::reservedJobs('high-priority')->first()->name;
// => 'App\Jobs\SendEmail'

Mode strict des Form Requests

Vous pouvez empêcher que des champs non déclarés passent la validation. Les champs reçus qui ne sont pas déclarés dans rules() provoquent l’échec de la validation.
// AppServiceProvider
public function boot(): void
{
    FormRequest::failOnUnknownFields(! app()->isProduction());
}

Passkeys (authentification sans mot de passe)

L’authentification sans mot de passe est désormais possible sur toute la pile de première partie.
  • laravel/passkeys (côté serveur) : migrations, routes de login, confirmation et gestion des identifiants, actions WebAuthn, événements
  • @laravel/passkeys (côté client) : helpers pour React, Vue et Svelte qui prennent en charge les cérémonies WebAuthn du navigateur
  • Intégration Fortify : il suffit d’activer avec Features::passkeys() pour qu’une application Fortify utilise les mêmes endpoints et contrats
// config/fortify.php
'features' => [
    Features::passkeys(),
],

Prise en charge des MCP UI Apps

Les outils MCP peuvent désormais rendre non seulement du texte, mais aussi des applications HTML complètes en sandbox à l’intérieur d’une iframe.
php artisan make:mcp-app-resource DashboardApp
class DashboardApp extends AppResource
{
    #[RendersApp]
    public function handle(Request $request): Response
    {
        return Response::view('mcp.dashboard-app', [
            'title' => 'Dashboard',
        ]);
    }
}

Inertia et écosystème

  • Hook useHttp : ajout des callbacks onHttpException et onNetworkError
  • Adaptateur Laravel Echo Svelte 5 : utilisation des fonctionnalités temps réel depuis Svelte via la rune useEcho
  • Dusk : clickOnceEnabled() et clickOnceVisible() pour éviter les tests instables
  • Horizon : prise en charge complète de Redis Cluster (compatible AWS ElastiCache Serverless)
  • Extension VS Code : autocomplétion, hover et navigation pour les nouveaux attributs de Laravel 13

Laravel Cloud et Laravel Forge

ProduitPrincipales mises à jour
Laravel CloudUI entièrement responsive compatible mobile, renforcement du edge network (top IP/paths, conversion des règles firewall et cache)
Laravel ForgePrise en charge de PHP 8.5, plusieurs serveurs SSL, alertes de renouvellement de certificat
Dernière modification le 13 juillet 2026