21

好的,所以今天我用我们的“实时”数据库中的新信息更新了我的数据库……从那时起,我的一个表格就出现了问题。如果您需要任何代码,请告诉我,我将对其进行编辑并发布所需的代码...

我有一个报告表格,其中有一个日期范围字段和一个代理部门的下拉列表。当我第一次访问该页面时,我在表单的开头看到了这个:

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 没有...知道为什么要这样做或如何解决它吗?

谢谢..

4

3 回答 3

26

您是否偶然在产生 CSRF 错误的操作中使用 $form->bindRequest() ?我有这个问题。您不应该绑定新表单的请求。如果您将表单发布到相同的操作,请将 bindRequest 包装在一个条件中,该条件检查方法是否为 POST:

if ($this->getRequest()->getMethod() == 'POST') {
  $form->bindRequest($this->getRequest());
  if ($form->isValid()) {
    ...
  }
}
于 2012-05-11T19:44:16.327 回答
22

{{ form_widget(form) }}使用构建您的自定义表单没有问题。您所要做的就是添加_token这样的: {{ form_widget(form._token) }}

于 2012-09-02T18:06:58.473 回答
18

这个错误让我疯狂了好几天!感谢克里希纳!如果在您的表单模板中您选择不使用{{ form_widget(form) }}您应该放置的默认表单行为{{ form_rest(form) }} 希望这可以帮助其他人!

于 2012-07-03T12:19:50.373 回答