Аргументы консоли symfony2

Я хочу создать один параметр с именем аргумент/для команды symfony. И хотите, чтобы symfony отличал эти 3 варианта:

  • my:command, что означает что-то вроде my:command --arg=null
  • my:command --arg, что означает my:command --arg=defalutValue
  • my:command --arg=someValue, который полностью явный.

т.е. Я хочу два режима работы для кода под этой командой: по умолчанию один и не по умолчанию с дополнительным аргументом, и этот аргумент должен иметь значение по умолчанию.

Я понимаю, что я могу создать 2 аргумента, но я ищу решение one-arg-to-rule-them-all.

Можно ли выполнить это со встроенными классами или создать пользовательские? Если решение доступно только с пользовательскими классами, скажите мне, с чего начать (т.е. "Создать подкласс..." или "установить пакет с именем..." ), потому что я не знаком с архитектурой Symfony2.

Ответ 1

Возможно:

->addOption('arg', 'a', InputOption::VALUE_NONE)
  • my: command = > $input->getOption('arg') //false
  • my: command -arg = > $input->getOption('arg') //true
  • my: command --arg = 5 = > $input->getOption('arg') //5

Ответ 2

Ответ corvax неверен и не работает. На сегодняшний день вы просто не можете этого достичь.

Это даже указано в документации консоли: Использование параметров команды.

См. также эти проблемы в GitHub:

Ответ 3

Symfony2 имеет консольный компонент, который можно использовать отдельно. Здесь вы можете увидеть документацию здесь. В качестве дополнительного примера вы можете проверить реализации в SensioGeneratorBundle.