La Guilde des Aventuriers vient d'équiper ses membres de parchemins magiques : on y consulte les tavernes de la région, on y réserve sa table… Gorm veut que le Dragon Ivre y figure. Seulement, les parchemins ne lisent pas le HTML : ils parlent JSON.
Première étape : publier la carte.
Votre mission
Dans Api\CarteController::plats() (GET /api/plats), renvoyez la carte en JSON, du moins cher au plus cher :
[ { "slug": "pain-du-voyageur", "nom": "Pain du voyageur", "description": "Une bouchée suffit pour une journée de marche…", "prix": 2.5, "specialite": false, "categorie": { "nom": "Accompagnements" } } ]
Pour essayer vos réponses, utilisez l'onglet Requêtes, à côté de l'aperçu. Ses boutons préparent des requêtes toutes faites.
Essayez d'abord la version naïve
$this->json($platRepository->findParPrixCroissant()), et regardez ce qui se passe. Le Serializer transforme les objets en tableaux en lisant tous leurs getters. Il suit donc aussi les relations : getCategorie(), puis getPlats() de la catégorie, puis ces plats… Il y a aussi getCreateur(), qui publierait l'e-mail et le hash du mot de passe de Bruna !
La bonne méthode : les groupes
Décidez explicitement de ce qui est public. Marquez chaque propriété à publier d'un #[Groups(['carte'])], puis demandez ce groupe au Serializer :
return $this->json($donnees, context: ['groups' => ['carte']]);
Une propriété sans groupe n'est plus publiée. C'est le bon réflexe pour une API : tout ce qui n'est pas explicitement public reste privé.