我想执行命令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()));
它说: '" no-interaction"选项不存在。' 在 输入 - > getOption('无互动') 在PopulateCommand中。
如果我改变我的代码:
$ input = new StringInput(' - no-interaction');
它说:
'" - 无互动"选项不存在。'
在
' ArgvInput - > addLongOption(' no-interaction',null)'
答案 0 :(得分:3)
一步一步,如何从控制器运行缓存清除命令:app / console cac:cle --env =(current_env)。
首先,确保将命令注册为service(service.yml):
xxx.cache.clear:
class: Symfony\Bundle\FrameworkBundle\Command\CacheClearCommand
calls:
- [setContainer, ["@service_container"] ]
控制器中的Conde:
$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上进行测试
答案 1 :(得分:2)
首先:检查该命令是否已注册为服务。 如果没有自己注册
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
如果已经注册,只需按照上面的说明使用
<小时/> 好吧,我明白了:我的解决方案是另一种解决方案(如果bundle的命令未在本地注册为服务,则可能更适合您自己的命令)。阅读一些文档,您的方法也应该有效。您遇到了阻止您的错误:
$output = new ConsoleOutput;
应为$output = new ConsoleOutput();
答案 2 :(得分:0)
如果您需要在控制器中执行命令中的代码,请将代码放在自己的类中,并在控制器和命令中调用该类。