问题是关于路由器的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 );)?
答案 0 :(得分:2)
来自Zend Framework's Reference Guide:
在每次迭代开始时,它在请求中设置一个标志 表示已分派操作的对象。如果一个动作或 pre或postDispatch插件重置该标志,调度循环将 继续并尝试分派新请求。通过改变 请求中的控制器和/或操作,并重置调度 flag,开发人员可以定义一系列要执行的请求。
通过调用setDispatched(false)
,您基本上是说请求尚未发送到控制器,并且Dispatcher将尝试重新发送它。这是必要的,因为您正在更改请求的模块,控制器和操作,并且您希望Dispatcher再次处理它并将其发送到正确的位置。