Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I run symfony 2 run command from controller

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.

like image 407
PayteR Avatar asked May 08 '12 11:05

PayteR


People also ask

How do I run a console command?

To execute commands: Type the command in the Terminal prompt. Press Enter to execute it.

What is Symfony controller?

In Symfony, a controller is usually a class method which is used to accept requests, and return a Response object. When mapped with a URL, a controller becomes accessible and its response can be viewed. To facilitate the development of controllers, Symfony provides an AbstractController .

What is Symfony console?

The Console component eases the creation of beautiful and testable command line interfaces. The Console component allows you to create command-line commands. Your console commands can be used for any recurring task, such as cronjobs, imports, or other batch jobs.


1 Answers

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.

like image 164
Dmitriy Avatar answered Sep 22 '22 09:09

Dmitriy