How can I run symfony 2 run command from controller

command, controller, symfony

Solution

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 Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;

class MyCommand extends ContainerAwareCommand {
    // …
}


// Your controller

use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\NullOutput;

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.

Problem

I'm wondering how can I run Symfony 2 command from browser query or from controller. Its because I don't have any possibility on hosting to run it and every cron jobs are setted by admin. I don't even have enabled `exec()` function so when I want to test it, I must copy all content from command to some testing controller and this is not best solution.

Original source

Related problems