Forms FOSUserBundle细枝表单提交非预期行为

Forms FOSUserBundle细枝表单提交非预期行为,forms,symfony,twig,fosuserbundle,pugxmultiuserbundle,Forms,Symfony,Twig,Fosuserbundle,Pugxmultiuserbundle,怎么了,伙计们 我在FOSUserBundle之上使用PUGXMultiUserBundle注册和登录两个不同的用户实体 一切都是开箱即用的:我的用户类从FOSUserBundle扩展了基本用户类,我的两个实体(卖方和客户)扩展了我的用户类 我不希望我的用户输入他们的用户名,因为电子邮件是首选的登录属性。因此,在我的用户类的setEmail()和setEmailCanonical()方法中,我还使用电子邮件设置username和usernameCononical。这很好,但是 问题在于细枝。当我

怎么了,伙计们

我在FOSUserBundle之上使用PUGXMultiUserBundle注册和登录两个不同的用户实体

一切都是开箱即用的:我的用户类从FOSUserBundle扩展了基本用户类,我的两个实体(卖方和客户)扩展了我的用户类

我不希望我的用户输入他们的用户名,因为电子邮件是首选的登录属性。因此,在我的用户类的setEmail()和setEmailCanonical()方法中,我还使用电子邮件设置username和usernameCononical。这很好,但是

问题在于细枝。当我在表单末尾呈现表单时,它会正确提交,用户也会注册。但是,如果我尝试使用form_小部件(form._token)呈现安全令牌并提交,我最终将以相同的形式结束,控制器不会执行,数据库保持不变,错误不会返回

((我这样做的原因是不显示“用户名”输入框,因为我不要求我的用户使用它。)

所以问题是:除了_标记隐藏输入之外,form_rest()还呈现了什么妨碍我的表单正常工作的因素

有没有更好的方法来实现我的目标

提前完成。

要做到这一点,需要采取两个步骤: 原来我已经把你答案的第一部分贴在了网上。使用
FOSUserBundle
删除用户名字段是一种经典的方法。遵循该帖子中提到的所有步骤

2使用
PUGXMultiUserBunde
时,需要做额外的工作:

#PUGXMultiUserBundle
pugx_multi_user:
  db_driver: orm
  users:
    user_one:
        entity:
          class: Acme\UserBundle\Entity\UserOne
        registration:
          form:
            type: Acme\UserBundle\Form\Type\UserOneRegistrationFormType
            name: fos_user_registration_form
            validation_groups:  [AcmeRegistration, Default]
          template: AcmeUserBundle:Registration:registerUserOne.html.twig

    user_two:
        entity:
          class: Acme\UserBundle\Entity\UserTwo
        registration:
          form:
            type: Acme\UserBundle\Form\Type\UserTwoRegistrationFormType
            name: fos_user_registration_form
            validation_groups:  [AcmeRegistration, Default]
          template: AcmeUserBundle:Registration:registerUserTwo.html.twig
应该是这样


编辑:验证组 acmerregistration将包含FOSUserBundle中用于注册的所有约束,您可以删除不想应用的约束(如username)。约束将在userOne和userTwo的公共字段上

正如您在评论中提到的,您还可以创建:

AcmeUserOneRegistration将包含注册UserOne的所有特定约束

AcmeUserTwoRegistration将包含UserTwo注册的所有特定约束

在PUGXMultiUserBundle配置中,对于userOne:

对于用户二:

validation_groups:  [AcmeRegistration,AcmeUserTwoRegistration, Default]

伟大的谢谢你,伙计!午饭后我就去试试。不过,在简短的阅读中有几件事:当您说在Acme\UserBundle\Resources\config\config.yml中创建validation.yml文件时,您的意思是在config dir中,对吗?还有一件事:我应该为两个不同的用户实体设置两个不同的验证组吗?我假设是这样的,尽管在上面的例子中,你对他们两个使用相同的组。再次感谢!:)config dir 2AcmeRegistration和AcmeProfile中的1yep实际上正在替换FOSUserBundle中的操作,因此它们将用于密码等字段。。。如果需要,可以创建一个AcmeUserOneRegistration验证组,在该组中添加特定于注册用户1(与用户2相同)的所有约束。看我的编辑。快到了!但我遇到了一个完整性约束冲突:1048列“username”不能为null。我想我毕竟没有覆盖验证。在AcmeBundle的Resources/config目录中包含validations.yml是否足够?或者它应该存在于app/Resources/config目录中?谢谢我的原则:schema:create--dump sql返回一个create TABLE语句,其中有一个username VARCHAR(255)NOT NULL字段,因此这里有点错误。我们没有删除在FOSUserBUndle中很重要的username字段,我们将其指定为与电子邮件相同的值(这也是唯一的)。然而,我们永远不会使用它,我们只是让它保持沉默。所以,请看我提到的答案的NB1点,在您的用户实体“setEmail”中有一个setter要修改。
validation_groups:  [AcmeRegistration,AcmeUserTwoRegistration, Default]