Inheritance 在Symfony2中创建具有可扩展实体的可移植捆绑包
我想创建一些Symfony2捆绑包,这些捆绑包可以在不同的项目中重用,但如果需要,也可以轻松扩展实体 例如,一个可重用的UserBundle,它包含一个定义了所有ORM映射的用户实体。但是,在我的应用程序中,我可能希望扩展此实体并添加额外的列、关联或覆盖父级的某些映射 我能找到的最接近的解决方案是Doctrine2的映射超类,但这样我就失去了可重用包的插件性和可玩性,即使我不想修改映射,我也必须在应用程序中扩展映射超类 其他有文档记录的继承方案需要修改父级的映射,这样我的UserBundle就不能在跨项目中移植了Inheritance 在Symfony2中创建具有可扩展实体的可移植捆绑包,inheritance,symfony,doctrine-orm,Inheritance,Symfony,Doctrine Orm,我想创建一些Symfony2捆绑包,这些捆绑包可以在不同的项目中重用,但如果需要,也可以轻松扩展实体 例如,一个可重用的UserBundle,它包含一个定义了所有ORM映射的用户实体。但是,在我的应用程序中,我可能希望扩展此实体并添加额外的列、关联或覆盖父级的某些映射 我能找到的最接近的解决方案是Doctrine2的映射超类,但这样我就失去了可重用包的插件性和可玩性,即使我不想修改映射,我也必须在应用程序中扩展映射超类 其他有文档记录的继承方案需要修改父级的映射,这样我的UserBundle就不
是否有一种方法可以在一个包中定义一个完全工作的实体,并在另一个包中扩展该实体?为了将来的参考,可以使用解决方法 您可以在中找到更多信息 步骤非常简单:
用户
实体创建一个接口
namespace Acme/UserBundle/Model;
interface UserInterface
{
// public functions expected for entity User
}
用户
实体实现该界面
namespace Acme/UserBundle/Entity;
/**
* @ORM\Entity
*/
class User implements UserInterface
{
// implement public functions
}
namespace Acme/InvoiceBundle/Entity;
/**
* @ORM\Entity
*/
class Invoice
{
/**
* @ORM\ManyToOne(targetEntity="Acme\UserBundle\Model\UserInterface")
*/
protected $user;
}
namespace Acme/UserBundle/Entity;
/**
* @ORM\Entity
*/
class User implements UserInterface
{
// implement public functions
}
namespace Acme/InvoiceBundle/Entity;
/**
* @ORM\Entity
*/
class Invoice
{
/**
* @ORM\ManyToOne(targetEntity="Acme\UserBundle\Model\UserInterface")
*/
protected $user;
}
doctrine:
# ....
orm:
# ....
resolve_target_entities:
Acme\UserBundle\Model\UserInterface: Acme\UserBundle\Entity\User
用户
实体
用户
类扩展或实现用户界面
namespace Acme/WebBundle/Entity;
use Acme/UserBundle/Entity/User as BaseUser;
/**
* @ORM\Entity
*/
class User extends BaseUser
{
// Add new fields and functions
}
doctrine:
# ....
orm:
# ....
resolve_target_entities:
Acme\UserBundle\Model\UserInterface: Acme\WebBundle\Entity\User
+1我和你得出了相同的结论,你有没有提出过解决方案?没有,目前的继承模式在理论上似乎是不可能的。关于这个问题有什么消息吗?我已经多次与这个限制作斗争,我想知道是否会发布一个真正的修复程序。仅仅为了在实体映射中添加一个字段而分叉束已经过时了。