Я хочу выполнить команду 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();
Если вам нужен код в команде, которая должна быть выполнена в контроллере, поместите код в свой класс и вызовите этот класс в контроллере и команде.