2

我们正在编写基于 Symfony2 的自定义 CMS,目前正在开发用户系统。我们的包定义了一个BaseSiteUser包含站点可能需要的用户数据的所有最常见属性的一个,以及一个SiteUser扩展BaseSiteUser和定义实体表的一个。

这个想法是,对于每个单独的项目,我们将SiteUser通过在新项目的命名空间中创建一个更具体的实体来覆盖实体,或者如果我们不指定新的,则使用默认的实体。

我们的 bundle 架构看起来有点像这样:

OurCompany
  CMSBundle
    Entities
      BaseSiteUser.php
      SiteUser.php

CustomerName
  CustomerProjectBundle
  CMSBundle
    Entities
      SiteUser.php

我们的问题是我们无法构建模型,以便使用SiteUser定义的 inCustomerName\CMSBundle而不是 in OurCompany\CMSBundle。相反,我们得到了这个错误:

  [Doctrine\DBAL\Schema\SchemaException]
  The table with name 'siteuser' already exists.

我们尝试查阅文档,但尚未涵盖该部分。搜索网络也没有提供解决方案。

我们正在使用注释方法来定义模型。

4

2 回答 2

0

我已经删除了我之前的答案,因为它是错误的:)。刚刚检查了FOSUserBundle. 他们正在使用继承映射。因此,在您的核心CMSBundle定义BaseSiteUser@MappedSuperclass和覆盖的捆绑包中,只需扩展BaseSiteUser

于 2012-04-13T14:08:22.497 回答
0

我认为这个解决方案应该有效(伪代码):

我们公司   
  CMSBundle
    实体

      /**
      * 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"})
      */
      BaseSiteUser.php

      /**
      * 站点用户
      *
      * @ORM\Table(name="siteuser")
      */
      SiteUser.php => 类 SiteUser 扩展 CustomerName\CMSBundle\Entities\SiteUserCustom

顾客姓名   
  客户项目包   
  CMSBundle
    实体
      /**
      * 站点用户自定义
      *
      * @ORM\Table(name="siteuser")
      */
      SiteUserCustom.php => 类 SiteUserCustom 扩展 OurCompany\CMSBundle\Entities\BaseSiteUser

不要忘记在AppKernel.php中注册你的包。如果您希望能够在SiteUserCustom中定义新字段,请将您的CustomerNameCMSbundle添加到实体管理器配置中:

形式:
  实体经理:
    默认:
      映射:
        OurCompanyCMS 捆绑包:~
        客户名称CMSbundle:~
于 2013-04-30T14:48:09.830 回答