L'inventaire

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

Notions abordées : Commande console#[AsCommand]SymfonyStyle#[Option]Codes de sortieCommandTester

Gorm fait l'inventaire chaque matin, un parchemin à la main, en recopiant la carte plat par plat. Il voudrait taper une commande et tout avoir sous les yeux : les plats, leur catégorie, leur prix et les portions qui restent.

Les commandes console

Une commande est une classe marquée #[AsCommand], dont la méthode __invoke() fait le travail. Comme un contrôleur, elle reçoit ses services par autowiring. Ses options et ses arguments se déclarent directement comme paramètres de __invoke().

SymfonyStyle ($io) donne une sortie soignée et cohérente : title(), table(), success(), warning(), error()…

Une commande renvoie un code de sortie : Command::SUCCESS (0), Command::FAILURE (1) ou Command::INVALID (2). Un script, une tâche planifiée ou la CI s'y fient pour savoir si tout s'est bien passé.

Votre mission

Écrivez app:inventaire :

  1. un titre, « Inventaire de la carte », puis un tableau avec les colonnes Plat, Catégorie, Prix (12,50 po) et Portions ;
  2. dans l'ordre de la carte : catégories par position, puis du moins cher au plus cher ;
  3. l'option --categorie=Boissons ne montre qu'une catégorie ;
  4. une catégorie inconnue fait échouer la commande, avec « La catégorie « Desserts » n'existe pas. » ;
  5. un résumé final : « 5 plats à la carte. » (« 1 plat » au singulier), ou « La carte est vide. » s'il n'y a rien.

Essayez-la dans la Console : app:inventaire, puis app:inventaire --categorie=Boissons.