0

我们有一个 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)都不需要参数。

参考资料:https ://github.com/netz98/n98-magerun/issues/90

4

1 回答 1

1

正如您在评论中看到的那样,此提交导致 Symfony2 的行为不像预期的那样。

然而,这个改变被恢复了,但只在 Symfony2.2 分支中(我猜这是一个错误)。您需要将控制台依赖项更新到某个 2.2.x 版本。
您可以节省地更新到 2.2.x 版本,因为控制台组件中没有 BC 中断(只是一些非常酷的功能

于 2013-03-05T12:53:05.480 回答