首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Symfony2中创建具有可扩展实体的可移植捆绑包

在Symfony2中创建具有可扩展实体的可移植捆绑包
EN

Stack Overflow用户
提问于 2012-03-21 16:44:37
回答 1查看 3.2K关注 0票数 21

我想创建一些Symfony2包,可以跨不同的项目重用,但如果需要,实体也可以很容易地扩展。

一个例子可以是一个可重用的UserBundle,它包含一个定义了所有ORM映射的用户实体。然而,在我的应用程序中,我可能想要扩展这个实体,并添加额外的列、关联或覆盖父实体的一些映射。

我能找到的最接近的解决方案是Doctrine2的映射超类,但这样我就失去了可重用捆绑包的即插即用特性,即使我不想修改映射,我也必须在我的应用程序中扩展映射超类。

其他有文档记录的继承方案需要修改父元素的映射,然后我的UserBundle就不能再跨项目移植了。

有没有办法在一个捆绑包中定义一个完全工作的实体,并在另一个捆绑包中对其进行扩展?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-13 17:34:37

为了便于将来参考,可以使用target entity resolution解决此问题。

您可以在Symfony docs中找到更多信息。

这些步骤非常简单:

  1. 在捆绑包中为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;}

  • 通过将以下内容添加到config.yml来配置监听程序

教义:# ....orm:# ....模型:Acme\用户包\模型\用户界面: Acme\UserBundle\Entity\User

如果要为当前应用程序自定义User实体

  1. User类扩展或实现UserInterface

命名空间Acme/WebBundle/Entity;使用Acme/UserBundle/Entity/User作为类;/** * @ORM\Entity */ BaseUser User extends { //添加新字段和函数}

  • 相应地配置侦听器

教义:# ....orm:# ....模型:Acme\用户包\模型\用户界面: Acme\WebBundle\Entity\User

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9801173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档