Pas n'importe quoi dans l'assiette

Exercice 2 sur 6 du chapitre 3 · 180 XP · 5 objectifs vérifiés par des tests

Notions abordées : ValidatorContraintesUniqueEntity

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.