doganddev
Accueil Blog Boutique

Laravel 12.48 : aliases d’expressions, BatchFinished, afterResponse et plus

DOG&DEV · 25/01/2025

Backups Logs & Audit
Laravel 12.48 : aliases d’expressions, BatchFinished, afterResponse et plus

Laravel 12.48 : aliases d’expressions, BatchFinished, afterResponse et plus

Laravel 12.48 (20 janvier 2026) introduit notamment : aliases d’expressions en Query Builder, l’événement BatchFinished, les drapeaux de décodage JSON pour le HTTP Client, HandleCors::skipWhen(), l’autorisation des crochets et accolades dans les chaînes de traduction, et des améliorations de typage et de tests parallèles. Voici les points les plus utiles au quotidien.

Prérequis

  • Projet Laravel 12.x à jour (composer update)
  • Connaissances de base en Query Builder, HTTP Client, CORS et files de jobs

1. Aliases d’expressions en Query Builder

Il est possible d’aliaser une expression SQL directement dans un select :

use Illuminate\Database\Query\Expression;

// Avant : select available_a - used_a from "users"
// 12.48 : select (available_a - used_a) as "remaining_a" from "users"
User::select([
    'remaining_a' => new Expression('available_a - used_a'),
])->get();

Cela améliore la lisibilité et évite les selectRaw pour des cas simples.

2. Événement BatchFinished

Un nouvel événement BatchFinished est déclenché quand un batch de jobs se termine avec succès (tous les jobs ont réussi). Complément de BatchFailed :

use Illuminate\Bus\Events\BatchFinished;

Event::listen(BatchFinished::class, function (BatchFinished $event) {
    $batch = $event->batch;
    Log::info("Batch {$batch->id} terminé avec succès.");
    // Notifications, métriques, enchaînement de workflows…
});

Utile pour : notifications de fin de traitement, nettoyage, enregistrement de métriques ou enchaînement d’autres batches.

3. Drapeaux JSON pour le HTTP Client

La méthode json() du HTTP Client accepte des drapeaux de décodage PHP :

$data = Http::get('https://api.example.com/data')->json(flags: JSON_BIGINT_AS_STRING);
$data = $response->json(flags: JSON_BIGINT_AS_STRING | JSON_THROW_ON_ERROR);

Pratique pour les grands entiers (dépassement d’int) et le décodage strict.

4. HandleCors::skipWhen()

CORS peut être ignoré pour certaines requêtes ou routes :

use Illuminate\Http\Middleware\HandleCors;

HandleCors::skipWhen(fn ($request) => $request->is('internal-api/*'));
HandleCors::skipWhen(fn ($request) => $request->hasHeader('X-Internal-Request'));

Utile pour les APIs internes, healthchecks ou proxies qui ne doivent pas subir la politique CORS.

5. Traductions avec crochets et accolades

Les chaînes de traduction peuvent désormais contenir [] et {} sans être interprétées comme des placeholders :

// lang/en/messages.php
return [
    'code_example' => 'Use the format: {user[name]}',
    'array_syntax' => 'Access with: $data[index]',
];

6. Vue compilée isolée en tests parallèles

En tests parallèles, les vues Blade compilées sont isolées par processus, ce qui évite les conflits de cache entre workers. Aucune config supplémentaire.

7. Autres évolutions

  • JobPopping : propriété queue disponible.
  • JobReleasedAfterException : propriété backoff disponible.
  • Bus::chain : les éléments falsy sont ignorés.
  • Typage : améliorations sur PendingRequest, Number::abbreviate(), Number::pairs(), merge() des collections.
  • Correctifs : MemoizedStore::restoreLock, compatibilité guards tiers, PruneCommand::isPrunable() en protected, etc.

Dépannage

Symptôme Cause possible Correctif
Comportement différent après mise à jour Changements de typage ou de signature Consulter le changelog et les types dans l’IDE
CORS encore appliqué sur une route skipWhen mal configuré ou trop restrictif Vérifier $request->is() / hasHeader et l’ordre des middlewares
Batch sans BatchFinished Jobs en échec ou batch non terminé Vérifier les logs des jobs et que le batch est bien Bus::batch()

Bonnes pratiques

  • Mettre à jour en staging et lancer les tests avant la prod ; les correctifs sur les guards peuvent impacter l’auth.
  • Profiter de skipWhen pour simplifier la config CORS plutôt que des middlewares ou domaines custom complexes.
  • Utiliser BatchFinished pour le suivi et l’observabilité des traitements par lots.

Ressources


Cet article s’inscrit dans notre série de guides technique et développement web. Pour un serveur ou une application sur-mesure, contact.

Commentaires (0)

Laisser un commentaire