model-view-controller - Symfony 2 : Dependency injection (DI) of Controllers

标签 model-view-controller symfony dependency-injection fosuserbundle

有没有机会让 Controller 依赖于他们的服务,而不是通过使用它们内部的服务容器,而是通过纯粹的构造函数依赖注入(inject)?

我想以这种方式编写 Controller :

<?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 而是通过简单的 return new $controller 来创建新的 Controller 实例。称呼。

最佳答案

绝对事实上它是推荐的,如果您查看大多数 3rd 方捆绑包,例如 FOSUser,您会发现这正是他们所做的。

诀窍是将您的 Controller 定义为服务,然后使用服务 ID 而不是类名。

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

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

关于model-view-controller - Symfony 2 : Dependency injection (DI) of Controllers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10106195/

相关文章:

android - 在 Android 列表中显示不同类型的行

PHP - MVC - 获取 View

java - 针对特定领域的 MVC 观察者模式

symfony - app/bootstrap.php.cache : failed to open stream: No such file or directory

maven - Java 7 独立应用程序中的依赖注入(inject)

php - 在 Zend 中创建表单 View

php - 如何避免TCP连接卡住PHP Socket(FIN_WAIT1)

php - 在子目录中使用反向代理运行 Symfony 5

angular - 测试 Angular 2 组件时如何模拟 @injected 服务?

javascript - 指令链接函数的参数是否依赖于 DI?