我有一个配置为beforeDispatch
侦听器的组件。此组件检查表单是否已POST,然后检查CSRF令牌是否已正确发送。如果没有,它应该转发到特殊的CSRF通知页面。我特别想要进行转发而不是重定向,以便用户可以选择报告他们访问过的页面。
这是我的代码:
public function beforeDispatch(\Phalcon\Events\Event $Event,\Phalcon\Mvc\Dispatcher $Dispatcher){
if($this->request->isPost()){
if(!$this->checkToken()){
echo 'before';
$Dispatcher->forward(['controller'=>'index','action'=>'csrf']);
echo 'after';
exit();
}
}
}
我得到的是一个显示“之前”的页面。如果我把那些echo
取出来,我只会得到一个空白页面。我可以手动访问/index/csrf/
并显示我想要的页面。
为什么请求没有转发?这是出于调度循环吗?
答案 0 :(得分:0)
您已编码:
exit();
我不确定你是否可以在这里使用,如果调度员还不知道控制器和动作是否存在于调度循环中。 https://docs.phalconphp.com/en/3.2/dispatcher#dispatch-loop
但我认为您可以拦截和控制调度程序应该使用的控制器类和操作。
$dispatcher->setModuleName(<your module nam if you have one>);
$dispatcher->setNamespaceName(<your controller class>);
$dispatcher->setActionName(<your action name>);
上的文档