Bruna invente ses plats tard le soir, quand la salle est fermée. Plutôt que d'ouvrir le formulaire de la cuisine, elle voudrait les ajouter d'une seule ligne :
app:plat:ajouter "Bière de la Comté" 3.5 --categorie Boissons --specialite
Arguments et options
- Un argument est une valeur attendue à une place précise : le nom, puis le prix.
- Une option a un nom (
--categorie), une valeur par défaut, et se place n'importe où. Une option booléenne s'active sans valeur :--specialite.
Dans une commande invocable, les deux se déclarent comme paramètres de __invoke(), avec leur type : Symfony convertit 4.5 en float, et --help les documente.
Les mêmes règles partout
Un plat ajouté en ligne de commande doit respecter les mêmes règles qu'un plat ajouté depuis le formulaire : un nom unique, un prix positif, une vraie description. Ces règles vivent déjà sur l'entité Plat : le Validator les applique à n'importe quel objet, sans formulaire.
Votre mission
Écrivez app:plat:ajouter :
- deux arguments, le nom et le prix, et l'option
--categorie: le plat est enregistré, puis la commande affiche l'adresse de sa fiche (/plat/biere-de-la-comte) ; --specialiteen fait une spécialité ;--descriptiondonne sa description (une description par défaut sinon) ;- un plat invalide (prix de 0, description trop courte…) est refusé avec les messages de l'entité, et le code
Command::INVALID; - un plat déjà à la carte est refusé de la même façon ;
- sans
--categorie:Command::INVALID; avec une catégorie inconnue :Command::FAILURE. Dans les deux cas, rien n'est enregistré.
Essayez-la dans la Console, puis vérifiez avec app:inventaire. Une valeur qui contient des espaces se met entre guillemets : --categorie "Plats de résistance".