Le formulaire est magnifique… et il accepte n'importe quoi. Pipin a déjà ajouté un plat sans nom, une « Soupe » à −3 pièces d'or (la taverne le payait pour la manger), et un deuxième « Ragoût du nain », qui a fait planter la base à cause du slug en double.
Plutôt que de vérifier chaque champ dans le contrôleur, on déclare les règles sur l'entité : le composant Validator les appliquera partout où l'on validera un Plat (formulaires, API, commandes…).
Votre mission
Ajoutez à l'entité Plat les contraintes suivantes, avec ces messages :
| Propriété | Règle | Message |
|---|---|---|
nom |
obligatoire, 100 caractères au plus | « Donnez un nom au plat. » |
description |
obligatoire, au moins 10 caractères | « Décrivez le plat en au moins 10 caractères. » |
prix |
obligatoire | « Indiquez un prix. » |
prix |
strictement positif | « Le prix doit être supérieur à zéro. » |
categorie |
obligatoire | « Choisissez une catégorie. » |
| le plat | pas deux plats du même nom | « Ce plat est déjà à la carte. » |
Le contrôleur et le formulaire n'ont pas à changer : $form->isValid() applique vos contraintes, et form_widget affiche les erreurs à côté des champs.
Rappel
La plupart des contraintes ignorent les valeurs vides : Positive accepte un prix null ! C'est voulu (on combine les contraintes), d'où NotBlank pour rendre un champ obligatoire. Sans lui, un prix vide passerait la validation… et la base refuserait l'enregistrement.
Sans message personnalisé, Symfony affiche un message par défaut, traduit en français (« Cette valeur ne doit pas être vide. »). Testez : laissez la description vide.