Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony呈现隐藏表单字段_Php_Forms_Symfony - Fatal编程技术网

Php Symfony呈现隐藏表单字段

Php Symfony呈现隐藏表单字段,php,forms,symfony,Php,Forms,Symfony,文档建议基于类创建表单类,以便表单可以重用。它还向您展示了如何独立于表单类呈现不同的字段,而不是使用{{form_widget()}}呈现所有字段 当我构建一个简单的注册页面时,我只想显示用户表单类中的一些字段,因此我将它们呈现为{{Form_widget(Form.email)} 但是,由于im独立呈现字段,因此不会呈现symfony框架所需的隐藏表单字段“CFTOKEN”。因此,错误:CSRF令牌无效。请尝试重新提交表单。 doucmnetation中没有提到这一点,也没有提到如何独立地呈现

文档建议基于类创建表单类,以便表单可以重用。它还向您展示了如何独立于表单类呈现不同的字段,而不是使用
{{form_widget()}}
呈现所有字段

当我构建一个简单的注册页面时,我只想显示用户表单类中的一些字段,因此我将它们呈现为
{{Form_widget(Form.email)}

但是,由于im独立呈现字段,因此不会呈现symfony框架所需的隐藏表单字段“CFTOKEN”。因此,错误:
CSRF令牌无效。请尝试重新提交表单。


doucmnetation中没有提到这一点,也没有提到如何独立地呈现隐藏的表单字段…

使用:{form_rest(form)}呈现其余字段


这是唯一真正

{{ form_widget(form._token) }}
Symfony文档演示了如何独立呈现每个表单字段,然后说必须使用
{{form_rest(form)}
生成其余的必需字段,如CFtoken,因为它还呈现了表单类中的所有表单字段,您故意避免了单独呈现这些字段,而不是仅使用{{form_widget()}}

GRRR

{{form_rest(form)}
我会让你开始的。一旦你赶上S2的速度,你会发现有很多选择


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

如Mike所说。或者禁用csrf,如“是”中所述,禁用csrf是另一种解决方案,但需要预先警告的是,不建议在任何可能传递敏感数据的表单上禁用csrf。@Mike我总是选择
form\u rest
并且从不禁用csrf,这是我“评论”而不是“回答”的主要原因@Ben_hawk为什么你的表单中有不希望在细枝输出中呈现的字段?+1@Qoop--Ben,你不应该因为不了解symfony的工作原理而过早地说你“讨厌symfony”。当然,(不想转移到对话中),但symfony只和你做的一样好。本,阅读form_rest上的描述——“在表单中的某个地方总是有这样的内容是个好主意,因为它会为您呈现隐藏的字段,并使您忘记呈现的任何字段变得更明显(因为它会为您呈现字段)。”——Symfony文档中没有这样的说明渲染要显示的每个表单字段,忽略表单类型中定义的其他字段“。那么,支持单个表单字段的格式转换有什么意义呢?自定义表单的显示。它看起来是这样的。为什么要求在表单类中灵活地为不同的事情呈现不同的字段呢。当然,这是一件显而易见的事情,能够为不同的事情呈现不同的表单,例如登录和注册。唯一的目的是定制我的表单的显示,同时完全绕过定制表单包含哪些字段的功能。无论如何,我们可以整天争论这一点,这只是我的意见,它应该更好地支持这类事情,因为表单类会因页面而异,这取决于再次需要的操作,如登录和注册
<div style="display: none;">{{ form_rest(form) }}</div>