2013-01-15 89 views
2

建议根据您的类制作表单类的文档可以重复使用。它还向您展示了如何独立于您的表单类呈现不同的字段,而不是使用{{ form_widget() }}呈现所有这些字段。Symfony呈现隐藏表单域

由于我正在构建一个简单的注册页面,我只想显示User Form类中的一些字段,因此我将它们渲染为这样{{ form_widget(form.email) }}

但是,因为im独立渲染字段隐藏表单字段'CFTOKEN'不呈现这是symfony框架所要求的。因此,GE的错误:The CSRF token is invalid. Please try to resubmit the form.

在doucmnetation没有提到这或如何呈现独立的隐藏表单域...

回答

2
+0

就像迈克说。或者按照http://symfony.com/doc/2.0/book/forms.html#csrf-protection – qooplmao

+0

中的说明禁用csrf是的,禁用CSRF是一种备用解决方案,但应预先警告不建议在任何情况下禁用CSRF可能会传递敏感数据的表单。 – Mike

+0

好吧,你不能使用{{form_rest(表单)}}就像你说它呈现其余的字段,我将每个表单字段唯一地呈现出来,因为它们是我想要显示的唯一字段... –

4

这真的是唯一的方式..

{{ form_widget(form._token) }} 

漂亮stuiped如何Symfony的文档向您展示如何独立渲染每个表单字段,然后说您必须使用{{ form_rest(form) }}来生成剩余的必需字段,如CFtoken,因为它还会渲染表单类中的所有表单字段,以避免独立执行它们只是使用{{form_widget()}}

哎呀

+1

Ben,阅读form_rest上的描述 - “这是一个好主意,会为您渲染隐藏的字段,并让您忘记渲染的任何字段更加明显(因为它会为您渲染字段)。“ ---在Symfony文档中没有任何地方会说“渲染每个你想要显示的表单域,并忽略你在表单类型中定义的其他域”。 – Mike

+0

那么支持个别表单域的销毁会有什么意义呢...... –

+0

要自定义表单的显示。它看起来的样子。 – Mike

6
<div style="display: none;">{{ form_rest(form) }}</div> 

会得到你的开始。一旦你起床S2,那么你会发现有很多选择。

例如,将一个参数传递给UserFormType的构造函数可以很容易地控制创建哪些字段。