我想创建一些Symfony2包,可以跨不同的项目重用,但如果需要,实体也可以很容易地扩展。
一个例子可以是一个可重用的UserBundle,它包含一个定义了所有ORM映射的用户实体。然而,在我的应用程序中,我可能想要扩展这个实体,并添加额外的列、关联或覆盖父实体的一些映射。
我能找到的最接近的解决方案是Doctrine2的映射超类,但这样我就失去了可重用捆绑包的即插即用特性,即使我不想修改映射,我也必须在我的应用程序中扩展映射超类。
其他有文档记录的继承方案需要修改父元素的映射,然后我的UserBundle就不能再跨项目移植了。
有没有办法在一个捆绑包中定义一个完全工作的实体,并在另一个捆绑包中对其进行扩展?
发布于 2013-09-13 17:34:37
为了便于将来参考,可以使用target entity resolution解决此问题。
您可以在Symfony docs中找到更多信息。
这些步骤非常简单:
User实体创建一个接口命名空间Acme/UserBundle/模型;接口UserInterface { //实体用户需要的公共函数}
User实体实现该接口命名空间Acme/UserBundle/Entity;/** * @ORM\Entity */类User实现UserInterface { //实现公共函数}
命名空间Acme/InvoiceBundle/Entity;/** * @ORM\Entity */类发票{ /** * @ORM\ManyToOne(targetEntity="Acme\UserBundle\Model\UserInterface") */ protected $user;}
教义:# ....orm:# ....模型:Acme\用户包\模型\用户界面: Acme\UserBundle\Entity\User
如果要为当前应用程序自定义User实体
User类扩展或实现UserInterface命名空间Acme/WebBundle/Entity;使用Acme/UserBundle/Entity/User作为类;/** * @ORM\Entity */ BaseUser User extends { //添加新字段和函数}
教义:# ....orm:# ....模型:Acme\用户包\模型\用户界面: Acme\WebBundle\Entity\User
https://stackoverflow.com/questions/9801173
复制相似问题