Intereting Posts
Вызов функции PHP из HTML-формы в том же файле? Как добавить орфографические предложения в скрипт поиска PHP / SQL PHP MongoDB Исключить _id из результатов apache2 на загрузке ubuntu – php Библиотека парсера, написанная на PHP хранить постоянную переменную на сервере через .htaccess Используйте mod_rewrite для удаления расширения .php и очистки URL-адресов GET одновременно Ошибка разработки Google Glass: (403) Доступ не настроен. Используйте Google Developers Console для активации API для своего проекта. вычислить разницу в каждом значении массива Может ли эта функция водяного знака улучшаться (PHP) Проводка массива с использованием cURL в терминале Шаблоны проектирования, используемые в Zend Framework Создание изображения коллажа фото, прикрепленного с помощью PHP от нескольких изображений Some Hosting Not Liking SET NAMES utf8 – «Невозможно выполнить запросы, в то время как другие небуферизованные запросы активны». mysql_fetch_array () ожидает, что параметр 1 будет проблемой ресурса

Symfony 2.4 выполняет команду из контроллера

Я хочу выполнить команду fos: elastica: заполнить с моего контроллера.

Я пробовал этот код, но он не работает, я получаю сообщение об ошибке = 1 var_dump show ""

$command = 'fos:elastica:populate'; $app = new Application($this->get('kernel')); $app->setAutoExit(false); $input = new StringInput($command); $output = new ConsoleOutput; $error = $app->run($input, $output); var_dump($error); var_dump(stream_get_contents($output->getStream()); 

Есть идеи ?

Я пробую другой код …..

  $command = $this->get('FosElasticaPopulateService'); $input = new StringInput(''); $output = new ConsoleOutput(); ladybug_dump($input); // Run the command $retval = $command->run($input, $output); if(!$retval) { echo "Command executed successfully!\n"; } else { echo "Command was not successful.\n"; } var_dump(stream_get_contents($output->getStream())); 

Он говорит: «Опция« без взаимодействия »не существует». на входе -> getOption («без взаимодействия») в PopulateCommand.

если я сменил свой код на:
$ input = new StringInput ('- no-взаимодействие');

Он говорит: «Опция« -no-взаимодействия »не существует». в
'ArgvInput -> addLongOption (' no-взаимодействие ', null)'

Шаг за шагом, как выполнить команду очистки кеша: app / console cac: cle –env = (current_env) от контроллера.

Сначала обязательно зарегистрируйте команду как service (service.yml):

 xxx.cache.clear: class: Symfony\Bundle\FrameworkBundle\Command\CacheClearCommand calls: - [setContainer, ["@service_container"] ] 

Конде в контроллере:

 $command = $this->container->get('xxx.cache.clear'); $input = new ArgvInput(array('--env=' . $this->container->getParameter('kernel.environment'))); $output = new ConsoleOutput(); $command->run($input, $output); 

Это все. | проверено на symfony 2.4

Прежде всего: проверьте, зарегистрирована ли эта команда как служба. Если вы не зарегистрируете его самостоятельно

 FosElasticaPopulateService: class: Path\To\Bundle\Class calls: - [setContainer, ["@service_container"] ] 

затем в ваш контроллер

 $output = new ConsoleOutput; $command = $this->get('FosElasticaPopulateService'); $command->run(null, $ouput); //null here is for input parameters; if you need them, insert 

если он уже зарегистрирован, просто используйте его, как показано выше


Хорошо, я понял: мое решение является альтернативным (возможно, больше подходит для вашей собственной команды, если команда пакета не зарегистрирована как службы изначально). Читая некоторую документацию, ваш метод также должен работать. У вас есть ошибка, которая блокирует вас:

$output = new ConsoleOutput; должен быть $output = new ConsoleOutput();

Если вам нужен код в команде, которая должна быть выполнена в контроллере, поместите код в свой класс и вызовите этот класс в контроллере и команде.