setDispatched()澄清

时间:2012-03-11 00:41:14

标签: php zend-framework

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

我在同一个控制器(indexController)中有一个fooAction()和一个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( false );)?

1 个答案:

答案 0 :(得分:2)

来自Zend Framework's Reference Guide

  

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

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