La commande de Bruna

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

Notions abordées : #[Argument]#[Option]Options booléennesValidatorInterfaceCommand::INVALID

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

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 :

  1. 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) ;
  2. --specialite en fait une spécialité ; --description donne sa description (une description par défaut sinon) ;
  3. un plat invalide (prix de 0, description trop courte…) est refusé avec les messages de l'entité, et le code Command::INVALID ;
  4. un plat déjà à la carte est refusé de la même façon ;
  5. 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".