如何覆盖Symfony2包中的实体

时间:2011-09-19 19:50:50

标签: php bundle symfony

我正在 Symfony2 使用 FOSUserBundle ,我需要能够注册用户而无需验证电子邮件是否为唯一,我只需要一封有效的电子邮件,以便许多用户可以使用相同的电子邮件(我知道这很奇怪,但我需要它)。

我在扩展FOSUserBundle 的捆绑包中有一个实体“User”,是否可以覆盖emailCanonical的列定义以消除唯一参数并删除验证来自FormType?

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

2 个答案:

答案 0 :(得分:4)

几周前我有一个similar issue。唯一的解决方案是扩展模型而不是实体:

use FOS\UserBundle\Model\User as BaseUser;

class User extends BaseUser

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

答案 1 :(得分:0)

我找到了一些东西,部分是解决方法,不是可行的解决方案。

问题分为两部分:形式和模型。

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

fos_user:
  registration:
    validation_groups: [YourValidationGroup]

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

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