0

怎么了,伙计们。

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

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

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

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

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

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

对于我想要完成的事情,有更好的方法吗?

提前说。

4

1 回答 1

0

有两个步骤可以做到这一点:

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

对于用户二:

validation_groups:  [AcmeRegistration,AcmeUserTwoRegistration, Default]
于 2014-01-15T11:59:57.623 回答