setDispatched()澄清

问题描述:

的问题是关于Zend Framework的路由器的setDispatched()方法...setDispatched()澄清

我有一个fooAction(),并在同一个控制器(在indexController的)一个loginAction()

我也有一个ActionHelper,我使用它的preDispatch()方法。在这个函数结束时,我有一个if声明,我检查ACL:

public function preDispatch() { 

    // some code... 

    if (!$this->_acl->isAllowed($role, $resource, $privilege)) { 
     $request->setModuleName('default'); 
     $request->setControllerName('index'); 
     $request->setActionName('login'); 

     $request->setDispatched(false); //what does this mean exactly?? 
    } 
} 

所以,当我想达到fooAction(),并且用户还没有得到许可,我设定的动作名称为“登录'...

现在我的问题是:$request->setDispatched(false);是什么意思?

这是否表明,ZF可以开始派遣在loginAction(),因为它尚未出动(setDispatched();)?

Zend Framework's Reference Guide

在每次迭代开始时,它设置一个标志中指示该动作已经被调度的请求 对象。如果某个操作或postDispatch插件重置该标志,则分派循环将继续并尝试分派新的请求。 通过更改请求中的 控制器和/或操作并重置已分派的 标志,开发人员可以定义要执行的请求链。

通过调用setDispatched(false)您基本上说,请求尚未发送到控制器,并且分派器将尝试重新调度它。这是必要的,因为您正在更改请求的模块,控制器和操作,并且您希望Dispatcher再次处理它并将其发送到正确的位置。