Laravel 12.43 : mergeHidden & mergeVisible sur Eloquent et macros HTTP Client

L
Laravel Actu
4 min

Laravel 12.43 enrichit l’écosystème avec des méthodes pratiques pour gérer la visibilité des attributs Eloquent sur une collection entière. Cette version améliore aussi l’extensibilité du client HTTP grâce au trait Macroable. Des correctifs de compatibilité PHP 8.5 complètent cette release.

Contexte de cette release

Publiée le 16 décembre 2025, la version 12.43 de Laravel Framework rassemble 25 pull requests. Les contributeurs ont travaillé sur l’ergonomie des collections Eloquent, la flexibilité du client HTTP et la préparation à PHP 8.5.

Cette mise à jour s’installe via Composer :

composer update laravel/framework

mergeHidden et mergeVisible sur les collections Eloquent

Jusqu’à présent, modifier la visibilité des attributs sur plusieurs modèles nécessitait une boucle manuelle. Les nouvelles méthodes mergeHidden() et mergeVisible() simplifient ce processus.

use App\Models\User;

// Récupère les utilisateurs avec leurs commentaires
$users = User::withWhereHas('comments')->get();

// Ajoute 'updated_at' aux attributs visibles de tous les modèles
$users->mergeVisible(['updated_at']);

// Masque 'email' sur toute la collection
$users->mergeHidden(['email']);

Ces méthodes propagent les modifications à chaque modèle de la collection. Fini le each() répétitif pour ajuster la sérialisation JSON de vos réponses API.

Macro sur les réponses HTTP Client

Le trait Macroable arrive sur la classe Illuminate\Http\Client\Response. Vous pouvez désormais enrichir les réponses HTTP avec vos propres méthodes.

use Illuminate\Http\Client\Response;
use Illuminate\Support\Facades\Http;

// Définition d'une macro personnalisée
Response::macro('movieFields', function () {
    // $this fait référence à l'instance Response
    return $this->collect()->only('title', 'year', 'runtime', 'director', 'plot');
});

// Utilisation sur une réponse API
$response = Http::get('https://api.movies.example/films/1');
$movie = $response->movieFields();

Cette fonctionnalité permet d’encapsuler des transformations métier directement sur les réponses, rendant le code plus lisible et réutilisable.

afterResponse conditionnel sur PendingDispatch

La méthode afterResponse() accepte maintenant un paramètre booléen. Vous pouvez conditionner le déclenchement différé d’un job sans structure conditionnelle externe.

use App\Jobs\ProcessAnalytics;

// Avant Laravel 12.43
if (app()->environment('production')) {
    ProcessAnalytics::dispatch($data)->afterResponse();
} else {
    ProcessAnalytics::dispatch($data);
}

// Avec Laravel 12.43
ProcessAnalytics::dispatch($data)
    ->afterResponse(app()->environment('production'));

Le job s’exécute après la réponse HTTP uniquement si la condition est vraie. Sinon, il part dans la queue normalement.

Storage::fake() accepte les Enums

La méthode Storage::fake() s’aligne sur Storage::disk() et accepte désormais un Enum comme nom de disque.

use Illuminate\Support\Facades\Storage;

// Définition d'un Enum pour les disques
enum Disk: string
{
    case Local = 'local';
    case S3 = 's3';
    case Public = 'public';
}

// Dans vos tests
Storage::fake(Disk::Local);

// Cohérent avec l'usage en production
Storage::disk(Disk::Local)->put('file.txt', 'contenu');

Cette cohérence évite les erreurs de typo et renforce le typage dans vos tests.

Nouvelle assertion assertFailedDependency

Pour tester les réponses HTTP 424 (Failed Dependency), une nouvelle assertion simplifie la syntaxe.

// Nouvelle méthode
$response->assertFailedDependency();

// Équivalent à
$response->assertStatus(424);

Le code HTTP 424 indique qu’une action a échoué car elle dépendait d’une autre action qui n’a pas abouti. Utile pour les workflows séquentiels.

Correctifs de compatibilité PHP 8.5

Plusieurs corrections sur les dépréciations de PHP 8.5 :

  • Passage de null au cache store corrigé
  • array_key_exists avec null dans AsPivot corrigé
  • Support de PHP 8.5 avec Herd dans ServeCommand

Ces ajustements garantissent une transition fluide vers PHP 8.5.

Autres améliorations notables

  • Fix deadlock cache_locks : résolution d’un blocage lors du nettoyage des verrous de cache
  • ConnectionEstablished event : l’événement se déclenche aussi lors d’une reconnexion à la base de données
  • Password::required() corrigé : la validation échoue correctement si la valeur est absente
  • SSL error: unexpected eof ajouté au détecteur de connexions perdues

Points d’attention

  • Aucun breaking change dans cette version
  • Les macros HTTP Response sont globales : nommez-les de manière explicite

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.