从2.1升级到2.2时我遇到了问题
在我的动作控制器中,我正在调用一个控制台命令并从命令中获取输出。
$input = new ArgvInput(array(
'object_id' => $object_id,
'client_id' => $client_id,
'email_address' => $email
)
);
$output = new ConsoleOutput();
$command = $this->get('mycommand');
$returnCode = $command->run($input, $output);
$response = stream_get_contents($output->getStream());
它在symfony 2.1中工作,但在升级到2.2之后,我得到了以下异常“没有足够的参数。”。为了防止这种情况,我在其他人面前添加了一个虚拟参数。
但是在此之后命令执行,但我无法读取输出,它总是为空。
有没有解决方案?
答案 0 :(得分:4)
Symfony 2.4分支添加了一个BufferedOutput,它可以完全满足您的需要。
$input = new ArgvInput(array());
$output = new BufferedOutput();
$command = $this->get("command");
$command->run($input, $output);
$content = $output->fetch();
答案 1 :(得分:2)
我找到了以下gist 用以下MemoryWriter class替换ConsoleOutput以解决问题。
它还建议使用Symfony \ Bundle \ FrameworkBundle \ Console \ Application类来避免必须将命令创建为服务:
$application = new Application($this->getContainer()->get('kernel'));
$application->setAutoExit(false);
// The input interface should contain the command name, and whatever arguments the command needs to run
$input = new ArrayInput(array("doctrine:schema:update"));
// Run the command
$retval = $application->run($input, $output);
var_dump($output->getOutput());