Dependency injection 如何为Symfony2控制器实现基类

Dependency injection 如何为Symfony2控制器实现基类,dependency-injection,symfony,Dependency Injection,Symfony,有一些文章涉及到这个话题,但对我来说,没有一篇是切实可行的解决方案。 我的目标是将一些基本方法(我在每个控制器中都需要这些方法)放入basecontroller中,例如 $this->getEntityManager(); $this->getRequest(); $this->getRepository($entityName); 如何做到这一点 好吧,我们必须将服务注入basecontroller,但是我如何告诉类为它们的超类使用服务呢? 关于控制器和依

有一些文章涉及到这个话题,但对我来说,没有一篇是切实可行的解决方案。 我的目标是将一些基本方法(我在每个控制器中都需要这些方法)放入basecontroller中,例如

   $this->getEntityManager();
   $this->getRequest();
   $this->getRepository($entityName);
如何做到这一点

好吧,我们必须将服务注入basecontroller,但是我如何告诉类为它们的超类使用服务呢? 关于控制器和依赖注入[1]有一些不错的文章,但最后我也被这种方法困住了,请参见我的评论:[2]

[1]

[2]

伪代码

MyBaseController impliments Symfony\Component\Di\ContainerAwareInterface
  setContainer($container)
    $this->container = $container

  getEntityManager
    return $this->container->get('doctrine.orm.entity_manager')

谢谢你的提示。当我使用basecontroller时,我收到以下错误消息:“致命错误:第9行的…Bundle\Controller\basecontroller::setContainer()声明必须与/Library/WebServer/Documents/…Bundle/Controller/basecontroller.php中的Symfony\Component\DependencyInjection\containerWareInterface::setContainer()声明兼容”。Setter如下所示:
函数setContainer(\Symfony\Component\DependencyInjection\ContainerInterface$container){$this->container=$container;}
$container
可以为空,所以应该为
(…\ContainerInterface$container=null)
坏主意。这就像装载所有东西,然后说它是精益的。我建议您只需使用
受保护的
方法执行
抽象类MyBaseController
。但是不要像这样注射所有的东西。看,这解释了很多。