Laravel 12.47 : Directive @includeIsolated et Cache::withoutOverlapping()

L
Laravel Actu
4 min

Laravel 12.47.0 débarque avec des améliorations significatives pour l’expérience développeur. Cette version introduit une nouvelle directive Blade pour isoler les variables, une méthode de cache simplifiée pour les opérations concurrentes, et étend le support des enums à travers le framework.

Présentation de Laravel 12.47

Publiée le 13 janvier 2026, cette release se concentre sur la productivité quotidienne des développeurs Laravel. Les principales nouveautés touchent Blade, le système de cache et la gestion des files d’attente.

La directive @includeIsolated

La directive @includeIsolated permet d’inclure un template Blade sans hériter des variables du parent. Contrairement à @include classique qui partage toutes les variables, cette approche garantit un environnement propre.

Comportement avec @include classique

{{-- Vue parente --}}
@php
    $user = auth()->user();
    $settings = ['theme' => 'dark'];
@endphp

{{-- Le partial hérite de $user et $settings --}}
@include('partials.header')

Avec @include, le partial header accède automatiquement à $user et $settings. Ce comportement peut créer des dépendances implicites difficiles à tracer.

Utilisation de @includeIsolated

{{-- Vue parente avec variables --}}
@php
    $user = auth()->user();
    $settings = ['theme' => 'dark'];
@endphp

{{-- Le partial n'a accès à AUCUNE variable parente --}}
@includeIsolated('partials.header')

{{-- Passage explicite des données nécessaires --}}
@includeIsolated('partials.header', [
    'title' => 'Bienvenue',
    'showLogo' => true
])

Cette directive renforce la modularité : chaque template déclare explicitement ses dépendances. Les tests unitaires deviennent plus simples et les conflits de variables disparaissent.

Cache::withoutOverlapping()

La nouvelle méthode Cache::withoutOverlapping() simplifie drastiquement la gestion des verrous (locks). Elle remplace un pattern verbeux par une API fluide.

Avant Laravel 12.47

use Illuminate\Support\Facades\Cache;

// Pattern classique pour éviter les exécutions concurrentes
Cache::lock('traitement-commande-' . $orderId)
    ->block(10) // Attendre 10 secondes max
    ->get(function () use ($orderId) {
        // Traiter la commande
        $order = Order::find($orderId);
        $order->process();
    });

Avec Laravel 12.47

use Illuminate\Support\Facades\Cache;

// Nouvelle syntaxe expressive
Cache::withoutOverlapping(
    key: 'traitement-commande-' . $orderId,
    callback: function () use ($orderId) {
        // Exécution garantie sans concurrence
        $order = Order::find($orderId);
        $order->process();
    },
    seconds: 10 // Timeout de blocage
);

Cette méthode excelle pour les jobs de queue, les tâches planifiées et toute opération où l’exécution simultanée causerait des incohérences de données.

Support étendu des enums

Laravel 12.47 généralise l’utilisation des enums PHP dans plusieurs composants du framework.

Enums pour PendingBatch::onConnection()

enum QueueConnection: string
{
    case Redis = 'redis';
    case Database = 'database';
    case Sync = 'sync';
}

use Illuminate\Support\Facades\Bus;

// Utilisation d'un enum pour la connexion
Bus::batch([
    new ProcessPodcast($podcast),
    new OptimizePodcast($podcast),
])->onConnection(QueueConnection::Redis)->dispatch();

Enums pour les clés de session

enum SessionKey: string
{
    case Cart = 'cart';
    case User = 'user';
    case Preferences = 'preferences';
}

// Les méthodes Session acceptent maintenant les enums
session()->get(SessionKey::Cart);
session()->put(SessionKey::User, $user);
session()->forget(SessionKey::Preferences);

Ces améliorations renforcent la type-safety et réduisent les erreurs de typo sur les chaînes de caractères.

Validations précognitives avec wildcards

La fonctionnalité Precognition supporte désormais les validations avec wildcards sur les tableaux.

// Dans votre FormRequest ou contrôleur
$request->validate([
    'items' => ['required', 'array'],
    'items.*.name' => ['required', 'string', 'max:255'],
    'items.*.quantity' => ['required', 'integer', 'min:1'],
    'items.*.price' => ['required', 'numeric', 'min:0'],
]);

Les requêtes précognitives valident maintenant correctement chaque élément du tableau dynamiquement. L’utilisateur reçoit un retour en temps réel sur chaque item du formulaire.

Notifications macroables

La classe Notification devient macroable, permettant d’étendre ses fonctionnalités.

use Illuminate\Notifications\Notification;

// Enregistrement d'une macro personnalisée
Notification::macro('sendToSlack', function (string $channel, $notifiable) {
    return Notification::route('slack', $channel)
        ->notify($notifiable);
});

// Utilisation de la macro
Notification::sendToSlack('#alerts', new OrderShipped($order));

Cette approche évite de créer une classe de notification de base juste pour partager des comportements communs.

Index sur failed_jobs

Le stub de migration failed_jobs inclut maintenant des index par défaut sur les colonnes fréquemment interrogées.

Schema::create('failed_jobs', function (Blueprint $table) {
    $table->id();
    $table->string('uuid')->unique();
    $table->text('connection');
    $table->text('queue')->index();           // Nouvel index
    $table->longText('payload');
    $table->longText('exception');
    $table->timestamp('failed_at')->useCurrent()->index(); // Nouvel index
});

Les requêtes filtrant par queue ou par date d’échec bénéficient d’une amélioration significative des performances.

Bus::batch() filtre les items falsy

use Illuminate\Support\Facades\Bus;

// Les valeurs null et false sont automatiquement ignorées
Bus::batch([
    new ProcessOrder($order),
    $needsNotification ? new SendNotification($order) : null,
    $needsAnalytics ? new TrackAnalytics($order) : false,
])->dispatch();

Plus besoin de filtrer manuellement le tableau avant de créer le batch.

Points d’attention

  • Pas de breaking changes : cette version est rétrocompatible
  • @includeIsolated : vérifiez que vos partials déclarent toutes leurs variables requises
  • Migration existante : les index sur failed_jobs ne s’appliquent qu’aux nouvelles migrations
  • Performance : Cache::withoutOverlapping() utilise le même mécanisme de lock que Cache::lock()

Mise à jour

composer update laravel/framework

Vérifiez votre version actuelle avec :

php artisan --version

Conclusion

Laravel 12.47 améliore l’ergonomie du framework sur plusieurs fronts. La directive @includeIsolated favorise des templates plus prévisibles, Cache::withoutOverlapping() simplifie la gestion des verrous, et le support étendu des enums renforce la type-safety. Ces ajouts s’inscrivent dans la continuité de Laravel : rendre le développement PHP plus agréable et plus sûr.

Ressources

À propos de Laravel Actu

Développeur passionné par Laravel et son écosystème.

Voir tous les articles
Partager :

Ne manquez aucune actualité Laravel

Recevez les meilleurs articles et tutoriels directement dans votre boîte mail.

Pas de spam. Désinscription possible à tout moment.