Codes de sortie d'une commande Symfony : SUCCESS, FAILURE, INVALID
Les codes de sortie d'une commande Symfony disent au script ou à la CI qui la lance si elle a réussi : 0 en cas de succès, autre chose sinon.
if ('' === $categorie) { $io->error('Précisez la catégorie : --categorie "Plats de résistance".'); return Command::INVALID; // 2 : la commande est mal utilisée } if (null === $this->categories->findOneBy(['nom' => $categorie])) { $io->error(sprintf('La catégorie « %s » n\'existe pas.', $categorie)); return Command::FAILURE; // 1 : elle n'a pas pu faire son travail } // … return Command::SUCCESS; // 0
__invoke() renvoie un entier, dont Symfony fait le code de sortie du processus : Command::SUCCESS (0), Command::FAILURE (1) ou Command::INVALID (2). Un humain lit les messages de SymfonyStyle ; un script ou la CI ne regardent que ce code, et ce qui a changé en base. $io->error() affiche un bandeau rouge mais ne touche pas au code : il faut aussi le return. Le piège : renvoyer SUCCESS après avoir refusé une donnée, au motif que la commande « a bien vérifié ». Le script qui l'enchaîne croit l'ajout réussi et continue.
Les exercices font échouer l'inventaire de Gorm sur une catégorie inconnue ; puis, dans des commandes « rendues plus prudentes », retrouver pourquoi un script nocturne n'ajoute plus aucun plat sans signaler d'erreur, croit ajouté un plat refusé, et pourquoi un grand ménage annonce des suppressions qu'il n'a pas faites.
2 exercices font travailler cette notion, en écrivant du code dans le navigateur.
Dans les parcours
- L'inventaire Symfony pour les devs PHP · chapitre 11 : Les ordres du patron
- 🐉 Boss : les ordres mal compris Symfony pour les devs PHP · chapitre 11 : Les ordres du patron
Notions voisines
Commande console#[Option]CommandTesterDébogageTraitement par lots