Блог

PHP/Symfony 2: Выполнить консольную команду с контроллера

В Symfony2 существует очень много консольных команд, которые помогут вам в работе, вы можете создавать собственные. А что делать в случаи когда нужно выполнить команду стороннего пакета (bundle) во время работы ссайта?

<?php

namespace System\AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Component\Console\Input\StringInput;
use Symfony\Component\Console\Output\BufferedOutput;

abstract class AbstractController extends Controller
{
    /**
     * @param string $command
     * @return string
     */
    protected function command($command = null)
    {
        $command = 'assets:install D:\\\Project\\\Web\\\local.sample\\\public';
        $app = new Application($this->get('kernel'));
        $app->setAutoExit(false);
        
        $input = new StringInput($command);
        $output = new BufferedOutput();
        
        $error = $app->run($input, $output);
        if($error != 0) {
            $msg = "Error: $error";
        }
        else {
            $msg = $output->fetch();
        }
        return $msg;
    }
    
}