我想在同一模块中从动作a
重定向到动作b
。操作b
需要执行csrf令牌,我还需要向它传递一些参数。
动作a:
public function executeA(sfWebRequest $request){
//... do stuff
$this->redirect('module/b?id='.$something->getId());
}
动作b:
public function executeB(sfWebRequest $request){
$request->checkCSRFProtection(); //morte
$something_id = $request->getParameter('id');
//... do stuff
}
只有在点击link_to('module/b?id='.$something.getId() , array('method' => 'post'))
或任何其他方法创建的锚点时,动作b
才会执行,因为它会随请求一起发送csrf令牌。
我尝试了$this->forward()
和$this->redirect()
方法,并尝试像link_to()
中那样添加'method' => 'post'
来重定向参数,但都不起作用,而且我在网上也找不到任何关于它的信息。API文档中说要注意这一点。我得到的只是
500 | Internal Server Error | sfValidatorErrorSchema
_csrf_token [Required.]
错误。它在标记为CCD_ 10的线上失败。请,有人知道,如何正确地做到这一点,以及在我想重定向到其他模块的情况下?
好了,现在更清楚了。
事实上,_csrf_token
没有重定向到其他操作,我的意思是,您没有在查询中重新添加它。
尝试:
public function executeA(sfWebRequest $request){
//... do stuff
$this->redirect('module/b?id='.$something->getId().'?_csrf_token='.$request->getParameter('_csrf_token'));
}