当前位置: 首页 > 知识库问答 >
问题:

Symfony 2:控制器的依赖项注入(DI)

隗轶
2023-03-14

有没有可能使控制器依赖于他们的服务,而不是通过使用服务容器,而是通过纯粹的构造函数依赖注入?

我希望以这种方式编写控制器:

<?php

class ArticleController extends \Symfony\Bundle\FrameworkBundle\Controller\Controller
{
    private $articleFacade;
    private $articleRepository;

    public function __construct(ArticleFacade $articleFacade, ArticleRepository $articleRepository)
    {
        $this->articleFacade = $articleFacade;
        $this->articleRepository = $articleRepository;
    }

    public function indexAction()
    {
        ...
    }

}

不幸的是,正如我所看到的,Symfony ControllerResolver不通过ServiceContainer而是通过简单的返回新的$controller调用创建新的控制器实例。

共有1个答案

景高杰
2023-03-14

事实上,这绝对是推荐的,如果您查看大多数第三方捆绑包(如FOSUser),您会发现它们正是这么做的。

诀窍是将控制器定义为服务,然后使用服务id而不是类名。

http://symfony.com/doc/current/cookbook/controller/service.html

请记住,您必须注入所有需要的服务,例如实体管理器,并且通常不会扩展symfony基类。当然,您可以注入整个容器,但这往往是不赞成的。

 类似资料:
  • 此时,我正在轻松地将东西注入控制器,在某些情况下构建自己的ResolversServices类。生活是美好的。 我不知道如何让框架自动注入到非控制器类中。工作原理是让框架自动注入我的控制器,这实际上是我项目的配置: 我在想我是否能为自己的课程做同样的事情。当我模仿控制器时,我假设我很接近,就像这样: 我想我失败的地方是当我这样叫它的时候: 我跟踪这个的问题实际上是所有关于DI的内容都是在控制器级别

  • 像这样的事情让我头疼,这太疯狂了。但事实是: 对于非控制器类,如何使用net core的内置依赖项注入?请提供一个包含实例化的示例。 谢谢

  • 2.1依赖注入和控制反转 Java应用程序-这是一个宽松的术语,它包括的范围从受限的嵌入式应用程序到n层的服务器端企业应用程序-通常组成程序的对象互相协作而构成正确的应用程序。因此,在一个应用程序中的对象彼此具有_依赖关系(dependencies)。_ 虽然Java平台提供了丰富的应用程序开发功能,但它缺乏将基本的模块组织成一个整体的方法,而将该任务留给了架构师和开发人员。虽然你可以使用如_工厂

  • 2.1 依赖注入和控制反转 Java应用程序——范围从受限的、嵌入式的应用到N层的、服务器端的企业应用——通常由协作形成该程序的对象构成,因此一个应用程序中的对象彼此依赖。 虽然Java平台提供了大量的程序开发功能,但是它缺少将基础构建块组成一个整体的工具,而将此任务留给了架构师和开发者。尽管可以利用设计模式(比如Factory、Abstract Factory、Builder、Decorator

  • 问题内容: 我仍然是Angularjs的新手。我想在控制器中动态注入服务(我创建的)的依赖项。 但是,当我对具有依赖项的服务进行编码时,出现此错误: 错误:未知提供程序:$ windowProvider <-$ window <-base64 这是控制器的代码。 此代码有效: 此代码不起作用: 另一个问题是服务与控制器位于同一模块中。如果模块具有依赖项,则无法使用(我的模块配置中具有$ route

  • 我跟随播放2.6的Scala留档和创建非阻塞操作的示例代码,并遇到一些运行时问题。我已经使用Scala模板创建了一个新的Play应用程序()。 播放留档建议应该在新的控制器中工作的代码是(这段代码逐字取自播放留档页面,从我这里有一些额外的导入): 然后,根据使用其他线程池的文档,我定义了