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再次处理它并将其发送到正确的位置。