Laravel 12.48 : aliases d’expressions, BatchFinished, afterResponse et plus
DOG&DEV · 25/01/2025
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é
queuedisponible. - JobReleasedAfterException : propriété
backoffdisponible. - 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()enprotected, 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
skipWhenpour simplifier la config CORS plutôt que des middlewares ou domaines custom complexes. - Utiliser
BatchFinishedpour le suivi et l’observabilité des traitements par lots.
Ressources
- Laravel News – Query Builder Expression Aliases in Laravel 12.48
- Changelog officiel Laravel 12.x
- Documentation Laravel – HTTP Client
Cet article s’inscrit dans notre série de guides technique et développement web. Pour un serveur ou une application sur-mesure, contact.