怎么了,伙计们。
我使用FOSUserBundle之上的PUGXMultiUserBundle来注册和登录两个不同的用户实体。
一切都是开箱即用的:我的User类扩展了FOSUserBundle中的基本User类,我的Seller和Customer的两个实体扩展了我的User类别。
我不希望我的用户输入他们的用户名,因为电子邮件是首选的登录属性。因此,在User类的setEmail()和setEmailCanonical()方法中,我还使用电子邮件设置了username和usernameCanonical。这很好用,但是。
问题出在Twig身上。当我在表单末尾呈现form_rest(表单)时,它会正确提交,并且用户会注册。但是,如果我尝试使用form_widget(form.token)呈现安全令牌并提交,我最终会使用相同的表单,控制器不会被执行,数据库保持不变,错误不会返回。
(我这样做的原因是不显示"用户名"输入框,因为我不需要向我的用户显示。)
所以问题是:除了_token隐藏输入之外,form_rest()还呈现了什么,这阻碍了我的表单正常工作?
有没有更好的方法来实现我想要实现的目标?
提前感谢。
要做到这一点,需要两个步骤:
1事实证明,我已经使用Symfony2中的FOSUserBundle在Remove/Replacetheusername字段中发布了您答案的第一部分。这是删除username(让它静音!)字段的经典方法,只使用FOSUserBundle
。按照帖子中提到的所有步骤操作。
2使用PUGXMultiUserBunde
:时需要做额外的工作
#PUGXMultiUserBundle
pugx_multi_user:
db_driver: orm
users:
user_one:
entity:
class: AcmeUserBundleEntityUserOne
registration:
form:
type: AcmeUserBundleFormTypeUserOneRegistrationFormType
name: fos_user_registration_form
validation_groups: [AcmeRegistration, Default]
template: AcmeUserBundle:Registration:registerUserOne.html.twig
user_two:
entity:
class: AcmeUserBundleEntityUserTwo
registration:
form:
type: AcmeUserBundleFormTypeUserTwoRegistrationFormType
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]