从控制器调用控制台命令并读取Symfony 2.2中的输出

时间:2013-06-17 08:40:13

标签: symfony console command upgrade symfony-2.2

从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之后,我得到了以下异常“没有足够的参数。”。为了防止这种情况,我在其他人面前添加了一个虚拟参数。

但是在此之后命令执行,但我无法读取输出,它总是为空。

有没有解决方案?

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());