教会2与Symfony DI集装箱 [英] Doctrine 2 with Symfony DI Container

查看:159
本文介绍了教会2与Symfony DI集装箱的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用利用原则2的Zend框架项目。我正在尝试让Symfony的DI容器与该项目一起工作,但是我遇到麻烦。假设我有一个类Foo需要注入两个实例。我可以设置一个Symfony DI容器没有问题,以提供一个新的Foo与注入的依赖。大!但现在如果我想让Foo成为一个主义实体呢?当我将实体插入数据库时​​,一切都很好,因为我可以从DI容器中获取一个新的实体,只需坚持实体。然而,当我从DB Doctrine查询实体时,正在实例化我的Foo实例,并且它们将不会注入正确的依赖关系。 Doctrine如何使用我的DI容器,使实体有适当的依赖关系?我知道Doctrine提供了一个postLoad钩子,我可以使用它来注入对我的实体的依赖,但是这种方式会破坏DI容器的目的和优点。

解决方案

一个学说实体是一个新的,不是注入的。实体不应该通过DIC创建。请参阅以下博客文章,介绍可新版和可注射版之间的区别:



http://misko.hevery.com/2008/09/30/to-new-or-not-to-new/


I am working on a Zend Framework project that leverages Doctrine 2. I'm trying to get Symfony's DI container working with the project as well, but I'm having trouble. Suppose I have a class "Foo" that needs two instances injected. I can set up a Symfony DI container no problem to fetch me a new "Foo" with the dependencies injected. Great! But now what if I want to make "Foo" a Doctrine entity? All is well when I insert the entity to the DB because I can grab a new one from the DI container and simply persist the entity. However, when I query the entity from the DB Doctrine is instantiating my "Foo" instances and they will not have the proper dependencies injected. How do I get Doctrine to use my DI container so that the entity will have the appropriate dependencies? I know that Doctrine offers a "postLoad" hook in that I could use to inject dependencies on my entity, but that kind of defeats the purpose and benefit of the DI container.

解决方案

A Doctrine Entity is a newable, not an injectable. Entities are not supposed to be created through a DIC. See this following blog post on the difference between newable and injectable:

http://misko.hevery.com/2008/09/30/to-new-or-not-to-new/

这篇关于教会2与Symfony DI集装箱的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆