FOS 用户覆盖用户存储的唯一约束

FOS User override unique constraint on user storage

我构建了一个多站点应用程序,具有以下要求:用户应该能够在集合的不同站点上创建帐户,使用相同的电子邮件和用户名

这是我所做的:

  1. 以 FOSUserBundle 作为父级创建 UserBundle
  2. 在 username、usernameCanonical、email 和 emailCanonical 字段上添加 AttributeOverride。
  3. 通过覆盖验证组禁用初始验证组(注册和配置文件)。

第 2 点:

/**
 * User
 * The user class to work with, based on FOSUser one.
 * To improve loose coupling, don't forget to link FOS\UserBundle\Model\UserInterface instead.
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="LCH\UserBundle\Entity\UserRepository")
 * 
 * @ORM\AttributeOverrides({
 *      @ORM\AttributeOverride(
 *          name="email",
 *          column=@ORM\Column(
 *              type="string",
 *              name="email",
 *              length=255,
 *              nullable=false,
 *              unique=false
 *          )
 *      ),
 *      @ORM\AttributeOverride(
 *          name="emailCanonical",
 *          column=@ORM\Column(
 *              type="string",
 *              name="email_canonical",
 *              length=255,
 *              nullable=false,
 *              unique=false
 *          )
 *      ),
 *      @ORM\AttributeOverride(
 *          name="username",
 *          column=@ORM\Column(
 *              type="string",
 *              name="username",
 *              length=255,
 *              nullable=false,
 *              unique=false
 *          )
 *      ),
 *      @ORM\AttributeOverride(
 *          name="usernameCanonical",
 *          column=@ORM\Column(
 *              type="string",
 *              name="username_canonical",
 *              length=255,
 *              nullable=false,
 *              unique=false
 *          )
 *      )
 * })
 */

点 3

fos_user:  
    profile:
        form:
            validation_groups:  [Default]
    registration:
        form:
            validation_groups:  [Default]

由于 this question.

获得最后 2 分

但是在表单验证时,我仍然触发错误,告诉我电子邮件地址已被使用。

我最后一次尝试通过在我的子包中重新定义它来覆盖 vendor/friendsofsymfony/user-bundle/Resources/config/storage-validation/orm.xml(唯一约束所在的位置)。它也没有用,这只是一个 "desperate" 尝试,因为如果它成功了,我就不会明白为什么要使用前面的点了。

终于找到问题了,椅子和屏风之间几乎和往常一样。

config.yml 之前

registration:
        form:
            type: LCH\UserBundle\Form\RegistrationType

    profile:
        form:
            validation_groups:  [Default] # Here you can also add your own groups if you have extra validation
    registration:
        form:
            validation_groups:  [Default] # Here you can also add your own groups if you have extra validation

registration.form键定义了两次...合并后...

profile:
        form:
            validation_groups:  [Default]
    registration:
        form:
            validation_groups:  [Default]
            type: LCH\UserBundle\Form\RegistrationType

...一切都很棒。