Dependency injection 如何为Symfony2控制器实现基类
有一些文章涉及到这个话题,但对我来说,没有一篇是切实可行的解决方案。 我的目标是将一些基本方法(我在每个控制器中都需要这些方法)放入basecontroller中,例如Dependency injection 如何为Symfony2控制器实现基类,dependency-injection,symfony,Dependency Injection,Symfony,有一些文章涉及到这个话题,但对我来说,没有一篇是切实可行的解决方案。 我的目标是将一些基本方法(我在每个控制器中都需要这些方法)放入basecontroller中,例如 $this->getEntityManager(); $this->getRequest(); $this->getRepository($entityName); 如何做到这一点 好吧,我们必须将服务注入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
。但是不要像这样注射所有的东西。看,这解释了很多。