再次调用application-> run()

时间:2013-03-05 12:10:14

标签: symfony console

我们有一个symfony 2控制台命令应用程序。在命令内部(扩展\Symfony\Component\Console\Command\Command),我们调用另一个命令。

Code:

$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的命令)都不需要参数。

参考文献:https://github.com/netz98/n98-magerun/issues/90

1 个答案:

答案 0 :(得分:1)

This commit会导致Symfony2的行为与预期不符,您可以在the comments中看到。

但是,此更改已恢复,但仅限于Symfony2.2分支(我猜这是一个错误)。您需要将控制台依赖关系更新为2.2.x版本 您可以保存更新到2.2.x版本,因为Console组件中没有BC中断(只有一些really cool features