对于某些看似愚蠢的人来说,无论如何,我是Symfony世界的新手并且阅读了我怀疑的文档:
Symfony如何在每个Controller类中注入DI Container实例,它扩展Controller,以便您可以使用get($ id)方法轻松地从容器访问服务?像这里:
use Acme\HelloBundle\Newsletter\NewsletterManager;
// ...
public function sendNewsletterAction()
{
$mailer = $this->get('my_mailer');
$newsletter = new NewsletterManager($mailer);
// ...
}
我从GitHub看到了Controller类的源代码,Symfony中的 Controller 类扩展了抽象类ContainerAware ,它实现了 ContainerAwareInterface 接口,它有一个方法 setContainer(ContainerInterface $ container = null);
我可以假设Controller本身试图设置一个对Container实例的引用,调用从ContainerAware抽象类继承的setContainer,但我不确定我是否正确,但是因为我知道在Symfony2中每个服务(具有特定功能的对象)在DI容器的监督下,DI容器负责将容器注入Controller setContainer()setter?容器本身?但是如何?
感谢您的关注!
答案 0 :(得分:3)
使用控制器,Symfony2使用ControllerResolver类来确定Controller是否是ContainerAwareInterface的实现,并将以这种方式注入容器。查看此文件(突出显示的行):
对于其他服务,您必须通过服务定义手动将容器注入其中。