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