See official documentation on this issue for newer versions of Symfony
You don't need services for command execution from controller and, I think, it is better to call command via run
method and not via console string input, however official docs suggest you to call command via it's alias. Also, see this answer. Tested on Symfony 2.1-2.6.
Your command class must extend ContainerAwareCommand
// Your command
use SymfonyBundleFrameworkBundleCommandContainerAwareCommand;
class MyCommand extends ContainerAwareCommand {
// …
}
// Your controller
use SymfonyComponentConsoleInputArrayInput;
use SymfonyComponentConsoleOutputNullOutput;
class SomeController extends Controller {
// …
public function myAction()
{
$command = new MyCommand();
$command->setContainer($this->container);
$input = new ArrayInput(array('some-param' => 10, '--some-option' => true));
$output = new NullOutput();
$resultCode = $command->run($input, $output);
}
}
In most cases you don't need BufferedOutput
(from Jbm's answer) and it is enough to check that $resultCode is 0
, otherwise there was an error.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…