如何在Symfony2 bundle中覆盖实体

7
我正在使用Symfony2FOSUserBundle,需要注册一个用户,不需要验证电子邮件是否唯一,只需要一个有效的电子邮件地址,以便多个用户可以拥有相同的电子邮件地址(虽然这很奇怪,但我需要它)。
我在一个bundle中有一个实体"User",它继承了FOSUserBundle,是否可以覆盖emailCanonical列定义,将unique参数删除,并从FormType中删除验证?
我使用注释来映射我的实体,并使用YML来验证我的表单。
2个回答

4

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

use FOS\UserBundle\Model\User as BaseUser;

class User extends BaseUser

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


FOS用户实体仅包含以下内容:抽象类User扩展自AbstractUser { } 您的意思是_缺点是您还必须将FOS用户模型中的所有内容复制到您的用户模型中,然后使您的实体扩展您的新用户模型_吗? - carbocation
抱歉,我一开始可能误解了问题。我遇到了需要创建更多自定义实体的情况。在我的自己的bundle中,我创建了一个新的User实体,它继承自FOSUserBundle的Model\User,并覆盖了其中的所有方法和变量。然后我创建了新的验证规则(通过注释在同一实体中),这些规则属于不同的验证组(就像你在回答中描述的那样)。我的原始问题在这里:https://github.com/FriendsOfSymfony/FOSUserBundle/issues/338。虽然这不是你问的完全相同的问题,但它可能会对你有所帮助。 - Ondrej Slinták

0

我找到了一些东西,它部分地是一个变通方法,而不是可行的解决方案。

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

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

fos_user:
  registration:
    validation_groups: [YourValidationGroup]

关于模型: 我还没有找到一个不需要覆盖整个模型的好解决方案。Doctrine2明确告诉我们,你不能覆盖映射类的属性。所以我做了一个迁移,使用DoctrineMigrationBundle删除了唯一约束索引……我并不为这个解决方案感到自豪,但它能够工作,并且让我保存了重复的电子邮件。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接