Grande nouvelle : les parchemins peuvent maintenant envoyer des messages. Plus besoin de traverser la forêt pour réserver sa table, un pigeon magique s'en charge. Il apporte un JSON comme celui-ci :
{ "nom": "Gimli", "personnes": 3, "jour": "2026-09-18" }
Votre mission
- Complétez le DTO
ReservationDemande, qui décrit et valide une demande :nom: obligatoire (« Indiquez votre nom. ») ;personnes: de 1 à 12 (« Le nombre d'aventuriers doit être entre 1 et 12. ») ;jour: obligatoire (« Indiquez le jour de votre venue. »), et pas dans le passé (« On ne réserve pas dans le passé, même avec un parchemin magique. »). Aujourd'hui, c'est permis.
- Dans
POST /api/reservations, recevez la demande avec#[MapRequestPayload], enregistrez uneReservation, puis répondez 201 Created avec la réservation (groupereservation).
Essayez les trois requêtes toutes faites de l'onglet Requêtes.
Ce que fait #[MapRequestPayload]
Symfony lit le corps JSON, remplit le DTO, puis le valide. Votre contrôleur ne reçoit que des demandes correctes. Sinon, Symfony répond à votre place :
| Problème | Réponse |
|---|---|
| JSON illisible | 400 Bad Request |
Règle non respectée, champ manquant, mauvais type ("personnes": "trois") |
422 Unprocessable Content, avec la liste des violations |
Pourquoi un DTO, et pas l'entité ?
La demande n'est pas la réservation. Le DTO ne contient que ce que le client a le droit d'envoyer : impossible de glisser un id ou une date de création. Et la validation de l'API ne dépend pas de la base.