我们有一个symfony 2控制台命令应用程序。在命令内部(扩展\Symfony\Component\Console\Command\Command
),我们调用另一个命令。
$this->getApplication()->run(new StringInput('cache:flush'), new NullOutput());
在更新最近的Symfony版本
之前,这一点正常但是现在我在下面的Symfony函数(\Symfony\Component\Console\Input\ArgvInput::parseArgument()
)
private function parseArgument($token)
{
$c = count($this->arguments); ## $c is 0 !
// if input is expecting another argument, add it
if ($this->definition->hasArgument($c)) {
$arg = $this->definition->getArgument($c);
$this->arguments[$arg->getName()] = $arg->isArray()? array($token) : $token;
// if last argument isArray(), append token to last argument
} elseif ($this->definition->hasArgument($c - 1) && $this->definition->getArgument($c - 1)->isArray()) {
$arg = $this->definition->getArgument($c - 1);
$this->arguments[$arg->getName()][] = $token;
// unexpected argument
} else {
throw new \RuntimeException('Too many arguments.'); ### this exception is thrown
}
}
两个命令(原始命令dev:setup:run
和我们称之为cache:flush
的命令)都不需要参数。
答案 0 :(得分:1)
This commit会导致Symfony2的行为与预期不符,您可以在the comments中看到。
但是,此更改已恢复,但仅限于Symfony2.2分支(我猜这是一个错误)。您需要将控制台依赖关系更新为2.2.x版本 您可以保存更新到2.2.x版本,因为Console组件中没有BC中断(只有一些really cool features)