FOSUserBundle twig表单提交不期望的行为

时间:2014-01-15 11:27:30

标签: forms symfony twig fosuserbundle pugxmultiuserbundle

什么事,伙计们。

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

一切都在开箱即用:我的User类扩展了FOSUserBundle的基本User类,以及我的两个实体,用于扩展我的User类的卖家和客户。

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

问题在于Twig。当我在表单的末尾呈现form_rest(表单)时,它正确提交并且用户已注册。但是如果我尝试使用form_widget(form._token)渲染安全性令牌并提交,我最终会以相同的形式出现,控制器无法执行,数据库保持不变,不会返回错误。

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

所以问题是:除了_token隐藏输入之外,form_rest()呈现的是什么阻止我的表单正常工作?

对于我想要实现的目标,是否有更好的方法?

提前吃完。

1 个答案:

答案 0 :(得分:0)

要采取以下两个步骤:

1 事实证明,我已经在Remove / Replace the username field with email using FOSUserBundle in Symfony2中发布了答案的第一部分。这是删除用户名的经典方法(让我们说它是沉默的!)字段,只有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

应该是它!


编辑:验证组

AcmeRegistration 将包含FOSUserBundle中用于注册的所有约束,您可以删除不想应用的约束(如用户名)。约束将在userOne和userTwo的公共字段上。

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

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

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

在PUGXMultiUserBundle配置中,对于userOne:

validation_groups:  [AcmeRegistration,AcmeUserOneRegistration, Default]

for userTwo:

validation_groups:  [AcmeRegistration,AcmeUserTwoRegistration, Default]