我们正在编写一个基于Symfony2的自定义CMS,目前正在用户系统上工作。我们的捆绑包定义了一个BaseSiteUser
,其中包含站点的用户数据可能需要的所有最常见属性,以及一个扩展BaseSiteUser
并为实体定义表的SiteUser
。
这个想法是,对于每个单独的项目,我们将通过在新项目的命名空间中创建一个更具体的实体来覆盖SiteUser
实体,或者如果我们不指定新实体,则使用默认实体。
我们的捆绑架构看起来有点像这样:
OurCompany
CMSBundle
Entities
BaseSiteUser.php
SiteUser.php
CustomerName
CustomerProjectBundle
CMSBundle
Entities
SiteUser.php
我们的问题是我们无法构建模型,以便使用CustomerName'CMSBundle
中定义的SiteUser
而不是OurCompany'CMSBundle
中定义的模型。相反,我们得到这个错误:
[Doctrine'DBAL'Schema'SchemaException]
The table with name 'siteuser' already exists.
我们尝试查阅文档,但该部分尚未涵盖。搜索网络也没有提供解决方案。
我们使用注释方法来定义模型。
我已经删除了我之前的答案,因为它:)错误。刚刚检查了FOSUserBundle
的实施。他们正在使用继承映射。因此,在您的核心CMSBundle
中将BaseSiteUser
定义为@MappedSuperclass
,并在覆盖的捆绑包中扩展BaseSiteUser
。
我认为这个解决方案应该有效(伪代码):
我们公司 招商证券 实体 /** * 基本站点用户 * * @ORM''Entity(repositoryClass="OurCompany''CMSBundle''Repository''SiteUserRepository") * @ORM''Table(name="siteuser") * @ORM''InheritanceType("SINGLE_TABLE") * @ORM''DiscriminatorColumn(name="discr", type="string") * * 不要使用明确的鉴别器映射(它将自动生成)!! * @ ORM''DiscriminatorMap({"basesiteuser" = "BaseSiteUser", "siteuser" = "SiteUser"}) */ 基本站点用户.php /** * 网站用户 * * @ORM''Table(name="siteuser") */ SiteUser.php => 类 SiteUser 扩展 CustomerName''CMSBundle''Entities''SiteUserCustom客户名称 客户项目捆绑包 招商证券 实体 /** * 网站用户自定义 * * @ORM''Table(name="siteuser") */ SiteUserCustom.php =>类 SiteUserCustom 扩展 OurCompany''CMSBundle''Entities''BaseSiteUser
不要忘记在 AppKernel.php 中注册您的捆绑包。如果您希望能够在 SiteUserCustom 中定义新字段,请将您的 CustomerNameCMSbundle 添加到实体管理器配置中:
或: entity_managers: 违约: 映射: 我们的公司CMS捆绑包: ~ 客户名称CMS捆绑包: ~