什么事,伙计们。
我在FOSUserBundle之上使用PUGXMultiUserBundle来注册和登录两个不同的用户实体。
一切都在开箱即用:我的User类扩展了FOSUserBundle的基本User类,以及我的两个实体,用于扩展我的User类的卖家和客户。
我不希望我的用户输入他们的用户名,因为电子邮件是首选的登录属性。因此,在我的User类的setEmail()和setEmailCanonical()方法中,我还使用电子邮件设置了username和usernameCanonical。这很好,但是。
问题在于Twig。当我在表单的末尾呈现form_rest(表单)时,它正确提交并且用户已注册。但是如果我尝试使用form_widget(form._token)渲染安全性令牌并提交,我最终会以相同的形式出现,控制器无法执行,数据库保持不变,不会返回错误。
((我这样做的原因不是显示“用户名”输入框,因为我不需要它给我的用户。))
所以问题是:除了_token隐藏输入之外,form_rest()呈现的是什么阻止我的表单正常工作?
对于我想要实现的目标,是否有更好的方法?
提前吃完。答案 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]