Contributed by Greg Anderson and Jérémy Derussé in #39642.
In some console commands it’s common to define two related options with opposite behaviors. For example, the default options applied to all Symfony commands include the --ansi and --no-ansi options: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17// ... use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputOption;
class SomeCommand extends Command { // ...
protected function configure(): void
{
$this
// ...
->addOption('ansi', null, InputOption::VALUE_NONE, 'Force ANSI output')
->addOption('no-ansi', null, InputOption::VALUE_NONE, 'Disable ANSI output')
;
}
}
In Symfony 5.3 we’ve introduced negatable command options to simplify these commands. A single negatable option creates two options in the command, following the pattern --xxx and --no-xxx. In practice, the following is equivalent to the previous example: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27// ... use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface;
class SomeCommand extends Command { // ...
protected function configure(): void
{
$this
// ...
->addOption('ansi', null, InputOption::VALUE_NEGATABLE, 'Force/disable ANSI output')
;
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
// if command is run as `command --ansi`, $useAnsi = true
// if command is run as `command --no-ansi`, $useAnsi = false
$useAnsi = $input->getOption('ansi');
// ...
}
}
Negatable options are only available for options that don’t allow passing any value to them (their previous type should be InputOption::VALUE_NONE).
Sponsor the Symfony project.
Connectez-vous pour ajouter un commentaire
Autres messages de ce groupe

This week, development activity mostly focused on dealing with the deprecation of sleep/wakeup methods in PHP 8.5 and their replacement by serialize/unserialize methods. In addition, we published more

It’s been only in July that we published symfony/ai and kicked off our AI initiative, but the repository has been busy since day one. Over 500 stars, more than 200 pull requests & issues, trending

🎤 Take the stage at SymfonyCon Amsterdam 2025, on your own terms!
The Unconference track is back and more dynamic than ever!
This unique, participant-driven format invites attendees to shape

This week, Symfony completed the migration to PHPUnit 12 in the 7.4 branch, which required many changes during the past weeks, such as replacing annotations with attributes. In addition, we updated th

🧑💻HACKDAY IS COMING!
Get ready to code, collaborate, and contribute, Symfony Hackday is back!
Join us in Amsterdam on Saturday, November 29th, for a hands-on hackathon designed to bring the

This week, Symfony released the maintenance versions 6.4.24, 7.2.9, and 7.3.2. Meanwhile, we began deprecating the XML configuration format in some components, enhanced the YAML configuration format t

Symfony 6.4.24 has just been released. Read the Symfony upgrade guide to learn more about upgrading Symfony and use the SymfonyInsight upgrade reports to detect the code you will need to change in you