当我正在研究FOSUserBundle时,我注意到注册表单使用了r.addChildEventListener(new ChildEventListener() { ...
和Symfony的表单模板,如form_widget
中所示:
register_content.html.twig
虽然登录表单甚至无法使用symfony的表单模板,如{% trans_default_domain 'FOSUserBundle' %}
{{ form_start(form, {'method': 'post', 'action': path('fos_user_registration_register'), 'attr': {'class': 'fos_user_registration_register'}}) }}
{{ form_widget(form) }}
<div>
<input type="submit" value="{{ 'registration.submit'|trans }}" />
</div>
{{ form_end(form) }}
所示:
logn_content.html.twig
我渴望了解为什么在这些形式的实施之间存在这种差异。
答案 0 :(得分:1)
一个可能的原因可能是Symfony使用不同的操作来检查凭据,因此Symfony不会像使用formbuilder时那样使用表单验证和处理(存储在实体中的数据)。因此,在这种情况下,您应该仅使用formbuilder来呈现HTML,这使得它比直接呈现HTML要慢一些。
当您需要渲染需要验证和/或csrf保护的表单或将实体用作formdata时,formbuilder会成为一个方便的工具。但是使用Symfony的formbuilder不是强制性的,并不总是需要。例如,只有一些Javascript操作的表单字段不会导致新的(POST-)请求,因此从不在服务器端处理,因此不需要使用Symfony的formbuilder。