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 :
- un titre, « Inventaire de la carte », puis un tableau avec les colonnes Plat, Catégorie, Prix (
12,50 po) et Portions ; - dans l'ordre de la carte : catégories par position, puis du moins cher au plus cher ;
- l'option
--categorie=Boissonsne montre qu'une catégorie ; - une catégorie inconnue fait échouer la commande, avec « La catégorie « Desserts » n'existe pas. » ;
- 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.