2011-09-19 137 views
7

我使用FOSUserBundleSymfony2中,我需要能够注册一个用户没有验证电子邮件是否是唯一的,我只需要一个有效的电子邮件地址,以便许多用户可以有相同的电子邮件(我知道这很奇怪,但我需要它)。如何Symfony2的束覆盖的实体

我的实体“用户”在一个捆绑延伸FOSUserBundle,是有可能覆盖emailCanonical的列定义消除唯一的参数,并从FormType删除验证?

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

回答

0

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

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

对于形式: 要覆盖FOSUserBundle登记表的唯一约束,您可以修改注册验证组在app /配置/ config.yml:

fos_user: 
    registration: 
    validation_groups: [YourValidationGroup] 

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

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

4

几周前我有一个similar issue。唯一的解决办法是改为扩展实体模型:

use FOS\UserBundle\Model\User as BaseUser; 

class User extends BaseUser 

的缺点是,你也必须一切从用户FOS实体复制到用户的实体。另一方面,您可以根据需要调整功能。

+0

的FOS用户实体包含不外乎:'抽象类用户扩展AbstractUser { }' 你的意思_The缺点是,你也必须一切从FOS用户模型复制到您的用户模型,然后有你的实体扩展你的新用户Model_? – carbocation

+0

对不起,我想起初我误解了这个问题。我遇到了需要创建更多定制实体的情况。在我自己的包中,我创建了新的用户实体,该实体从FOSUserBundle扩展了'Model \ User'并覆盖了它的所有方法和变量。然后,我创建了属于不同验证组的新验证规则(通过同一实体中的注释)(如您在答案中所述)。我原来的问题在这里:https://github.com/FriendsOfSymfony/FOSUserBundle/issues/338。这与你所问的并不是同一个问题,但它可以帮助你。 –