首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从命令调用操作

从命令调用操作
EN

Stack Overflow用户
提问于 2015-07-20 16:46:24
回答 3查看 9.2K关注 0票数 6

我想从自定义命令执行操作。forward方法Controller.php类提供了这个函数,但我不知道如何从命令文件的execute ()方法访问它

EN

回答 3

Stack Overflow用户

发布于 2015-07-20 17:44:11

由于请求堆栈的原因,使控制器成为服务将导致性能开销,因为它应该返回一个HttpResponseRequest作用域在命令中不是很有用。

我建议您将控制器中的操作重构为单独的服务类定义,并通过使其成为ContainerAwareCommand来从控制器和命令中的容器中获取该类。

http://symfony.com/doc/current/cookbook/console/console_command.html#getting-services-from-the-service-container

票数 6
EN

Stack Overflow用户

发布于 2015-07-20 17:10:12

使用控制器作为服务How to Define Controllers as Service

票数 4
EN

Stack Overflow用户

发布于 2015-07-20 17:49:59

如果您试图从命令调用控制器操作,则需要在命令代码中设置控制器(以及随后对控制器的请求)。

如果您查看一下Symfony\Bundle\FrameworkBundle\Controller,就会发现forward()方法复制了当前的Request对象,然后通过HttpKernel发送它。由于命令不使用HttpKernel,因此这种转发不会起作用。

根据您的操作,您可能只能执行以下操作:

代码语言:javascript
复制
$controller = new Your\Controller();
$controller->yourAction();

如果您的操作需要请求,则:

代码语言:javascript
复制
$request = Symfony\Component\HttpFoundation\Request::createFromGlobals();
$controller = new Your\Controller();
$controller->setContainer($this->getContainer()); // from the ContainerAwareCommand interface
$controller->yourAction($request);

根据它的声音,这不会做你想要的事情,所以有几种前进的方法:

  1. 将你的控制器变成一个服务,这在the cookbook中有描述,这将意味着你的控制器和操作可以直接从你的命令(可能)已经设置的容器中调用。这处理你的控制器和动作可能具有的依赖性。
  2. 将你的动作所需的功能拆分到它自己的类或服务中。这是更好的前进方式,因为如果您在两个地方调用相同的代码,将其集中在某个地方是有意义的。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31512200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档