摆脱';命令';自定义Symfony命令调用帮助中的参数

摆脱';命令';自定义Symfony命令调用帮助中的参数,symfony,Symfony,我正在尝试编写一个控制台命令,该命令包含几个可选选项,但其中一个是必需的。如果所有选项都没有值,我想打印命令的帮助说明。这可以正常工作,但有一个例外——当我手动调用“help”命令时,“help”屏幕上会显示一个“command”参数 <?php require __DIR__ .'/vendor/autoload.php'; use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Inp

我正在尝试编写一个控制台命令,该命令包含几个可选选项,但其中一个是必需的。如果所有选项都没有值,我想打印命令的帮助说明。这可以正常工作,但有一个例外——当我手动调用“help”命令时,“help”屏幕上会显示一个“command”参数

<?php
require __DIR__ .'/vendor/autoload.php';

use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;

class TestCommand extends Symfony\Component\Console\Command\Command
{
  public function configure()
  {
    $this->setName('test')
      ->setDescription('A test command.')
      ->setHelp('Help message.')
      ->addOption('one', null, InputOption::VALUE_OPTIONAL, 'Option 1', null)
      ->addOption('two', null, InputOption::VALUE_OPTIONAL, 'Option 2', null);
  }

  public function execute(InputInterface $in, OutputInterface $out)
  {
    $helpCommand = $this->getApplication()->get('help');
    $helpCommand->run(new ArrayInput(['command_name' => $this->getName()]), $out);
    return 0;
  }
}

$app = new Symfony\Component\Console\Application;
$app->add(new TestCommand());
$app->run();
与刚才的
帮助的输出相比

vagrant@precise64:~/sf2-console-test
$ ./run.php test
Usage:
 test [--one[="..."]] [--two[="..."]]

Arguments:
 command               The command to execute

Options:
 --one                 Option 1
 --two                 Option 2
...
有没有办法摆脱“command”参数

“command”参数是application::getDefaultInputDefinition的一部分,但我已经尝试了
$this->getApplication()->getDefinition()->setArguments([])在调用help命令之前,它似乎没有什么区别


使用symfony/console v2.4.2以及dev master 563254c进行测试显然这就是您需要做的:

$args = $this->getNativeDefinition()->getArguments();
foreach ($args as $key => $arg) {
  if ($key === 'command') unset($args[$key]);
}
$this->getNativeDefinition()->setArguments($args);
$helpCommand = $this->getApplication()->get('help');
$helpCommand->run(new ArrayInput(['command_name' => $this->getName()]), $out);
return 0;
在我的情况下,我可以做以下事情,因为我没有任何参数

$this->getNativeDefinition()->setArguments([]);

你为什么需要这样一个“命令概念”?第一段已经解释过了。
$this->getNativeDefinition()->setArguments([]);