我正在开发利用Doctrine 2的Zend Framework项目。我试图让Symfony的DI容器与项目一起工作,但我遇到了麻烦。假设我有一个需要注入两个实例的类“Foo”。我可以设置一个Symfony DI容器没问题,以便为我提供一个注入了依赖关系的新“Foo”。大!但是现在如果我想让“Foo”成为一个学说实体呢?当我将实体插入到数据库时,所有这一切都很好,因为我可以从DI容器中获取一个新实体并简单地保留该实体。但是,当我从数据库主义查询实体正在实例化我的“Foo”实例并且它们不会注入适当的依赖关系。我如何获得Doctrine使用我的DI容器,以便实体具有适当的依赖关系?我知道Doctrine提供了一个“postLoad”钩子,我可以使用它来为我的实体注入依赖关系,但这种做法会破坏DI容器的用途和优点。Docfine 2与Symfony DI容器
2
A
回答
4
一个学说实体是一个新的,而不是一个注射。实体不应通过DIC创建。查看newable和注射的区别这下面的博客文章:
0
它有点棘手,但它可以做到的。 symfony di容器有一个补丁,它允许你将一个已经存在的对象传递给容器构建器实例,并让di容器为你配置它(例如,基于接口注入依赖)。该修补程序在github上的此存储库中实现:https://github.com/lstrojny/symfony但未将其上传到symfony主存储库。
你使用这样的:
$user = new User();
$container->configure('someId', $user);
然后,你可以注册Doctrine's eventmanager进行一餐后的事件处理程序(在这里看到更多的细节:http://www.doctrine-project.org/docs/orm/2.0/en/reference/events.html)。在这个事件处理程序中,通过上述方法配置加载的实体。这很明显,但你不能在这种情况下使用构造函数注入,只能使用setter。
设置起来有点棘手,但可以非常强大,特别是与symfony di容器基于接口注入依赖关系的能力相结合。
相关问题
- 1. 与symfony的DI容器
- 2. 如何将Zend Cache StorageFactory集成到Symfony 2 DI容器中?
- 3. 从水貂访问Symfony 2的DI容器
- 4. DI容器和控制器
- 5. PHP DI容器
- 6. 用symfony DI
- 7. Docfine 2在Symfony中使用表单类型实体的结果缓存
- 8. 与DI/IoC容器保持联系
- 9. Symfony 2:控制器的依赖注入(DI)
- 10. 如何将Symfony DI容器本身注入到服务中?
- 11. 如何正确使用Symfony DI服务容器?
- 12. DI与beforeEach在角2
- 13. DI容器代码组织
- 14. Symfony 2服务容器为空
- 15. Symfony 2,服务容器,导入参数
- 16. 如何选择DI容器?
- 17. Symfony 2路由注解与容器参数
- 18. Scandir()与getParameter Symfony 2
- 19. 用纯Symfony 2容器生成器配置Doctrine 2
- 20. Graylog2与Symfony 2(Monolog)
- 21. 没有注释或XML文件的Docfine中的Symfony映射
- 22. 控制器与命令Symfony的2
- 23. 如何自动完成从Symfony 2 DI在netbeans中的方法
- 24. 问题与角度2测试DI
- 25. 为什么Laravel没有DI容器?
- 26. 与DI
- 27. 中的Symfony 2中的Symfony 2
- 28. JSR330 DI与弹簧DI
- 29. Symfony 2与Symfony \ Component \ DomCrawler \ Crawler测试xml
- 30. 关于DI和IoC容器的问题
完美。谢谢! – 2011-03-14 14:36:50