如何在Symfony2包中覆盖实体


How to overwrite an Entity in Symfony2 bundle

我使用FOSUserBundle对于Symfony2,我需要能够注册用户而不验证电子邮件是否唯一,我只需要一个有效的电子邮件,所以许多用户可以拥有相同的电子邮件(我知道这很奇怪,但我需要它)。

我有一个实体"用户"在一个bundle中,扩展FOSUserBundle,是否可以覆盖emailCanonical的列定义以消除唯一参数并从FormType中删除验证?

我正在使用Annotation来映射我的实体和YML来验证我的表单。

几周前我也遇到过类似的问题。唯一的解决方案是扩展模型而不是实体:

use FOS'UserBundle'Model'User as BaseUser;
class User extends BaseUser

缺点是您还必须将所有内容从FOS User实体复制到您的User实体。另一方面,您可以根据需要调整功能。

我发现了一些东西,这部分是围绕的工作,不可行的解决方案。

问题分为两部分:表单和模型。

对于表单:要覆盖FOSUserBundle注册表单的唯一约束,你可以修改app/config/config.yml中的注册验证组:

fos_user:
  registration:
    validation_groups: [YourValidationGroup]

对于模型:我还没有找到一个好的解决方案,而不覆盖所有的模型。Doctrine2明确地告诉你不能覆盖映射类的属性。所以我做了一个迁移,删除了唯一的约束索引与DoctrineMigrationBundle…我并不为这个解决方案感到自豪,但它确实有效,它让我保存了重复的电子邮件。

如果你有更好的模型解决方案,请不要犹豫!