Zend framework2 如何为表单生成新的Csrf令牌
我有一张表格。当我更改表单中的Select元素时,我会对同一URL进行Ajax调用,这基本上会加载一个新表单,该表单包含一些附加字段或删除了一些字段(不同的类别、不同的字段…) 现在,我从请求中得到的表单显然将具有相同的Csrf令牌,因为该令牌只用于一个请求。也就是说,每当我做这种动作时,我都必须生成一个新的令牌,但我真的不知道如何做 我的假设是我必须做类似的事情Zend framework2 如何为表单生成新的Csrf令牌,zend-framework2,zend-form,csrf,Zend Framework2,Zend Form,Csrf,我有一张表格。当我更改表单中的Select元素时,我会对同一URL进行Ajax调用,这基本上会加载一个新表单,该表单包含一些附加字段或删除了一些字段(不同的类别、不同的字段…) 现在,我从请求中得到的表单显然将具有相同的Csrf令牌,因为该令牌只用于一个请求。也就是说,每当我做这种动作时,我都必须生成一个新的令牌,但我真的不知道如何做 我的假设是我必须做类似的事情 if ($request->isXmlHttpRequest()) { $form->get('csrf')
if ($request->isXmlHttpRequest()) {
$form->get('csrf') ->regenerateCsrfToken()
}
但很明显,这个函数并不存在,但它应该是类似于这些行的东西。如果您有任何意见,我们将不胜感激您是否尝试过以下方法:
if ($request->isXmlHttpRequest()) {
$form->get('csrf')->getCsrfValidator()->getHash(true);
}
getHash(true)
将重新生成散列,并将更改后的散列存储在生成器中,因此当您稍后从元素中检索新值时,表单将检索新值。@MichaelGooden的答案绝对正确。这是解决问题的一般方法。然而,在我所做的工作中,还有一个错误,这可能也与其他用户有关。select.onChange()
方法的主要功能是:
- 保存表单数据
- 获取新表单(get/item/add/categoryId)
- 重新填充相同的表单字段
form.rePopulate(data)
函数中,我只是排除了CSRF元素,就这样,所有这些都像一个符咒一样工作