Phalcon 调度程序转发无效
Phalcon dispatcher forwarding having no effect
我将一个组件配置为 beforeDispatch
侦听器。该组件检查表单是否已发布,然后检查 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();
}
}
}
我得到的只是一个显示 "beforeafter" 的页面。如果我把那些 echo
去掉,我只会得到一个空白页。我可以手动访问 /index/csrf/
并显示我想要的页面。
为什么请求没有被转发?这是在调度循环之外吗?
您已编码:
exit();
?
我不确定您是否可以在此处使用转发,因为调度程序尚不知道控制器和操作是否存在于调度循环中。 https://docs.phalconphp.com/en/3.2/dispatcher#dispatch-loop
但我认为您可以拦截和控制控制器 class 和调度程序应该使用的操作。
$dispatcher->setModuleName(<your module nam if you have one>);
$dispatcher->setNamespaceName(<your controller class>);
$dispatcher->setActionName(<your action name>);
上的文档
我将一个组件配置为 beforeDispatch
侦听器。该组件检查表单是否已发布,然后检查 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();
}
}
}
我得到的只是一个显示 "beforeafter" 的页面。如果我把那些 echo
去掉,我只会得到一个空白页。我可以手动访问 /index/csrf/
并显示我想要的页面。
为什么请求没有被转发?这是在调度循环之外吗?
您已编码:
exit();
?
我不确定您是否可以在此处使用转发,因为调度程序尚不知道控制器和操作是否存在于调度循环中。 https://docs.phalconphp.com/en/3.2/dispatcher#dispatch-loop
但我认为您可以拦截和控制控制器 class 和调度程序应该使用的操作。
$dispatcher->setModuleName(<your module nam if you have one>);
$dispatcher->setNamespaceName(<your controller class>);
$dispatcher->setActionName(<your action name>);
上的文档