Php Symfony如何在扩展控制器的每个类中注入其DI容器?
对于某些人来说,这可能看起来很愚蠢,但无论如何,我对Symfony的世界还不熟悉,阅读文档时,我产生了一个疑问: Symfony如何将DI容器实例注入到每个控制器类中,这些控制器类扩展控制器,使您可以使用get($id)方法轻松地从容器访问服务???就像这里:Php Symfony如何在扩展控制器的每个类中注入其DI容器?,php,symfony,dependency-injection,controller,di-containers,Php,Symfony,Dependency Injection,Controller,Di Containers,对于某些人来说,这可能看起来很愚蠢,但无论如何,我对Symfony的世界还不熟悉,阅读文档时,我产生了一个疑问: Symfony如何将DI容器实例注入到每个控制器类中,这些控制器类扩展控制器,使您可以使用get($id)方法轻松地从容器访问服务???就像这里: use Acme\HelloBundle\Newsletter\NewsletterManager; // ... public function sendNewsletterAction() { $mailer = $thi
use Acme\HelloBundle\Newsletter\NewsletterManager;
// ...
public function sendNewsletterAction()
{
$mailer = $this->get('my_mailer');
$newsletter = new NewsletterManager($mailer);
// ...
}
我从GitHub看到了控制器类的源代码,Symfony中的控制器类扩展了抽象类ContainerWare,它实现了ContainerWareInterface接口,该接口有一个方法setContainer(ContainerInterface$container=null)
我可以假设控制器本身试图设置对调用从ContainerWare抽象类继承的setContainer的容器实例的引用,但我不确定我是否正确,但因为我知道在Symfony2中,每个服务(具有特定功能的对象)都在DI容器的监督下,谁负责将容器注入控制器setContainer()setter?容器本身?但是怎么做呢
谢谢你的关注 对于控制器,Symfony2使用ControllerResolver类确定控制器是否是ContainerWareInterface的实现,并将以这种方式注入容器。请参见此文件(突出显示的行):
至于其他服务,您必须通过服务定义手动将容器注入其中。太好了,这就是我搜索的内容。谢谢如果将控制器声明为服务而不是注入容器,则标记的部分将其从容器中取出。它是注射的。