我想从自定义命令执行操作。 forward方法Controller.php类提供了这个函数,但我不知道从命令文件的execute()方法访问它
答案 0 :(得分:6)
使控制器成为服务会因请求堆栈而导致性能开销,因为它应返回HttpResponse
。 Request
范围在命令中不会非常有用。
我建议您将Controller中的操作重构为单独的服务类定义,并通过将其设置为ContainerAwareCommand
来从控制器和命令中的容器中获取该类。
答案 1 :(得分:4)
答案 2 :(得分:3)
如果您尝试从命令调用控制器操作,则需要在命令代码中设置控制器(以及随后的控制器请求)。
如果您查看Symfony\Bundle\FrameworkBundle\Controller
,那么您会看到forward()
方法重复当前Request
对象,然后通过HttpKernel
发送。由于命令不使用HttpKernel,这种转发将不起作用。
根据您的操作的不同,您可能只能执行以下操作:
$controller = new Your\Controller();
$controller->yourAction();
如果您的操作需要请求,则:
$request = Symfony\Component\HttpFoundation\Request::createFromGlobals();
$controller = new Your\Controller();
$controller->setContainer($this->getContainer()); // from the ContainerAwareCommand interface
$controller->yourAction($request);
通过它的声音,这不会做你想要的,所以有几种方法前进: