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

时间:2016-06-17 13:38:23

标签: php forms validation symfony fosuserbundle

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

这是我做的:

  1. 使用FOSUserBundle创建UserBundle作为父
  2. 在用户名,usernameCanonical,email和emailCanonical字段上添加AttributeOverride。
  3. 通过覆盖验证组来禁用初始验证组(注册和配置文件)。
  4. 第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(其中有唯一约束)。它也没有工作,这只是一个绝望的"试试,因为如果结果有效,我就不会理解为什么要使用前面的点。

1 个答案:

答案 0 :(得分:1)

我终于找到了问题,这在椅子和屏幕之间几乎一如既往。

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

......一切都在摇滚。