2013-06-17 2 views
2

я столкнулся с проблемой, когда обновление от 2,1 до 2,2вызова консоли команду от контроллера и читать вывод в Symfony 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()); 

он работал в симфони 2.1, но после обновления до версии 2.2 первого я получил следующее исключение «Не достаточно аргументов.». Чтобы этого не произошло, я добавил фиктивный параметр перед другими.

Но после этого команда выполняется, но я не могу прочитать вывод, он всегда пуст.

Есть ли решение для этого?

ответ

2

Я нашел следующее gist , которое заменяет ConsoleOutput следующим MemoryWriter class, чтобы решить проблему.

Он также предлагает использовать класс 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()); 
4

Symfony 2,4 филиал добавили BufferedOutput, который делает именно то, что вы хотите ,

$input = new ArgvInput(array()); 
    $output = new BufferedOutput(); 

    $command = $this->get("command"); 
    $command->run($input, $output); 

    $content = $output->fetch(); 

 Смежные вопросы

  • Нет связанных вопросов^_^