#[Groups] dans Symfony : choisir les champs que le Serializer publie

L'attribut #[Groups] du Serializer Symfony range les propriétés d'une classe par groupes : on demande un groupe, seules ses propriétés sont publiées.

class Plat
{
    #[ORM\Column]
    #[Groups(['carte'])]
    private ?float $prix = null;

    #[ORM\ManyToOne]
    private ?Employe $createur = null; // aucun groupe : jamais publié
}

// Dans le contrôleur :
return $this->json($platRepository->findParPrixCroissant(), context: ['groups' => ['carte']]);

Sans groupe demandé, le Serializer publie tout ce que ses getters exposent, relations comprises. Avec context: ['groups' => [...]], il inverse la logique : rien ne sort sans y avoir été invité, et une relation marquée n'expose à son tour que les propriétés du même groupe dans la classe liée. Une propriété peut appartenir à plusieurs groupes, un getter calculé aussi, pour qu'une fiche détaillée en montre plus que la liste. Le piège : le nom du groupe est une simple chaîne. Une coquille, cartes au lieu de carte, et la propriété disparaît de la réponse sans la moindre erreur ; oublier le contexte, et tout réapparaît.

Les exercices font publier la carte de la taverne en n'exposant que le nécessaire, catégorie comprise, créateur exclu, puis traquer, dans une API sabotée, des prix évaporés et une réservation qui en dit beaucoup trop.

2 exercices font travailler cette notion, en écrivant du code dans le navigateur.

Dans les parcours

Notions voisines

API JSONSerializerDébogagePare-feu