#[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

Notions voisines

Commande consoleCodes de sortieCommandTester