我想从自定义命令执行操作。forward方法Controller.php类提供了这个函数,但我不知道如何从命令文件的execute ()方法访问它
发布于 2015-07-20 17:44:11
由于请求堆栈的原因,使控制器成为服务将导致性能开销,因为它应该返回一个HttpResponse。Request作用域在命令中不是很有用。
我建议您将控制器中的操作重构为单独的服务类定义,并通过使其成为ContainerAwareCommand来从控制器和命令中的容器中获取该类。
http://symfony.com/doc/current/cookbook/console/console_command.html#getting-services-from-the-service-container
发布于 2015-07-20 17:10:12
使用控制器作为服务How to Define Controllers as Service
发布于 2015-07-20 17:49:59
如果您试图从命令调用控制器操作,则需要在命令代码中设置控制器(以及随后对控制器的请求)。
如果您查看一下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);根据它的声音,这不会做你想要的事情,所以有几种前进的方法:
https://stackoverflow.com/questions/31512200
复制相似问题