Phalcon调度员转发无效

时间:2017-11-01 22:30:59

标签: php phalcon

我有一个配置为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/并显示我想要的页面。

为什么请求没有转发?这是出于调度循环吗?

1 个答案:

答案 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>);

检查dispatch loop

上的文档