#[Option] dans Symfony Console : les options d'une commande
L'attribut #[Option] de Symfony Console déclare une option de commande comme un paramètre de __invoke(), typé, avec sa valeur par défaut et son aide.
#[AsCommand(name: 'app:plat:ajouter', description: 'Ajoute un plat à la carte.')] final class AjouterPlatCommand { public function __invoke( SymfonyStyle $io, #[Argument('Le nom du plat')] string $nom, #[Argument('Son prix, en pièces d\'or')] float $prix, #[Option('La catégorie du plat (par son nom)')] string $categorie = '', #[Option('C\'est une spécialité de la maison')] bool $specialite = false, ): int { // app:plat:ajouter "Bière de la Comté" 3.5 --categorie Boissons --specialite } }
Dans une commande invocable, plus de configure() ni de $input->getOption() : le nom du paramètre donne celui de l'option ($dryRun donne --dry-run), son type convertit la valeur, et la description passée à l'attribut alimente --help. Une option bool s'active sans valeur ; un type nullable, ?string $categorie = null, distingue l'option absente d'une option vide. Une option a toujours une valeur par défaut, là où un #[Argument] est attendu à une place précise. Le piège : croire une option obligatoire. Rien n'oblige à la taper ; c'est à la commande de vérifier qu'elle est là, et de répondre Command::INVALID sinon.
Les exercices font ajouter à l'inventaire de Gorm une option --categorie qui filtre la carte, puis écrire la commande de Bruna : deux arguments, une catégorie, une description facultative et l'interrupteur --specialite.
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
- La commande de Bruna Symfony pour les devs PHP · chapitre 11 : Les ordres du patron