好的,今天我用我们的'实时'数据库中的新信息更新了我的数据库......从那时起,我一直在我的某个表单上遇到问题。如果您需要任何代码,请告诉我,我将对此进行编辑并发布所需的代码......
我有一个报告表单,其中包含日期范围字段和代理部门的下拉列表。当我第一次访问该页面时,我在表单的开头看到了这个:
The CSRF token is invalid. Please try to resubmit the form
所以我转到我的其他一个具有相同类型信息的表单,然后检查_token,这就是出现的结果:
<input type="hidden" id="ecs_crmbundle_TimeClockReportType__token" name="ecs_crmbundle_TimeClockReportType[_token]" value="87e358fbc4d6d3e83601216b907a02170f7bcd92" />
<input type="hidden" id="ecs_crmbundle_SimpleSalesReportType__token" name="ecs_crmbundle_SimpleSalesReportType[_token]" value="87e358fbc4d6d3e83601216b907a02170f7bcd92" />
第一个是显示错误的那个,SimpleSalesReport没有...任何想法为什么这样做或我如何解决它?
谢谢..
答案 0 :(得分:26)
您是否偶然在产生CSRF错误的操作中使用$ form-&gt; bindRequest()?我有这个问题。您不应该绑定新表单的请求。如果要将表单发布到同一个操作,请将bindRequest包装在条件中,以检查方法是否为POST:
if ($this->getRequest()->getMethod() == 'POST') {
$form->bindRequest($this->getRequest());
if ($form->isValid()) {
...
}
}
答案 1 :(得分:22)
使用{{ form_widget(form) }}
构建自定义表单没有问题。
您所要做的就是像这样添加_token
:
{{ form_widget(form._token) }}
答案 2 :(得分:18)
这个错误让我疯了几天!
谢谢克里希纳!
如果您在表单模板中选择不使用默认表单行为{{ form_widget(form) }}
,则应该{{ form_rest(form) }}
希望这可以帮助其他人!