【问题标题】:How to implement a baseclass for Symfony2 controllers如何为 Symfony2 控制器实现基类
【发布时间】:2011-08-13 15:38:10
【问题描述】:

有一些文章涉及到这个话题,但对我来说,它们似乎都不是一个实用的解决方案。 我的目标是将一些基本方法(无论如何我都需要在每个控制器中)放入基本控制器中,例如

   $this->getEntityManager();
   $this->getRequest();
   $this->getRepository($entityName);

如何做到这一点?

AFAIK 我们必须将服务注入基本控制器,但我如何告诉类为它们的超类使用服务? 有一些关于控制器和依赖注入的不错的文章 [1],但最后我也被这种方法卡住了,请在此处查看我的评论:[2]

[1]http://miller.limethinking.co.uk/2011/04/15/symfony2-controller-as-service/

[2]http://miller.limethinking.co.uk/2011/04/15/symfony2-controller-as-service/#comment-579

【问题讨论】:

    标签: dependency-injection symfony


    【解决方案1】:

    伪代码

    MyBaseController impliments Symfony\Component\Di\ContainerAwareInterface
      setContainer($container)
        $this->container = $container
    
      getEntityManager
        return $this->container->get('doctrine.orm.entity_manager')
    

    【讨论】:

    • 感谢您的提示。当我使用基本控制器时,我收到以下错误消息:“致命错误:...Bundle\Controller\BaseController::setContainer() 的声明必须与 Symfony\Component\DependencyInjection\ContainerAwareInterface::setContainer() 的声明兼容在 /Library/WebServer/Documents/...Bundle/Controller/BaseController.php 第 9 行"。二传手看起来像这样:function setContainer(\Symfony\Component\DependencyInjection\ContainerInterface $container){ $this->container = $container; }
    • $container 可以为空,所以应该是(...\ContainerInterface$container = null)
    • 坏主意。这就像加载所有内容并说它很瘦。我建议你简单地用protected 方法做一个abstract class MyBaseController。但不要注入所有这样的东西。请参阅"problematic"'s post series "Controller in a diet" 它解释了很多。
    猜你喜欢
    • 2013-12-18
    • 1970-01-01
    • 2020-03-01
    • 2013-12-11
    • 2014-10-28
    • 2016-02-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    相关资源
    最近更新 更多