Nouveau dans Symfony 8.2 (en développement). Un chemin de PropertyAccess lit une seule branche : [0][nom], [membres][1][email]. Pour lire le même champ dans chaque élément d'une collection, il fallait une boucle, et une boucle de plus par niveau d'imbrication. Symfony 8.2 ajoute le joker [*], qui désigne tous les éléments.
Avant
$emails = []; foreach ($equipes as $equipe) { $emails[] = array_map(fn (array $membre) => $membre['email'], $equipe['membres']); }
Depuis Symfony 8.2
$emails = $accessor->getValue($equipes, '[*][membres][*][email]'); // [['ada@…', 'linus@…'], ['grace@…']]
Chaque [*] ajoute un niveau au résultat, et les clés sont remplacées par une liste. Le joker est désactivé par défaut. Dans une application, on l'active par la configuration :
property_access: wildcard_reads: true
À faire
Activez le joker dans config/packages/property_access.yaml. Ensuite, réécrivez les deux méthodes de Extracteur avec l'accesseur de l'application (PropertyAccessorInterface), sans boucle ni array_map. Les résultats ne doivent pas changer : l'aperçu /rapport les affiche.