2012-03-11 142 views
0

的問題是關於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();)?

回答

2

Zend Framework's Reference Guide

在每次迭代開始時,它設置一個標誌中指示該動作已經被調度的請求 對象。如果某個操作或postDispatch插件重置該標誌,則分派循環將繼續並嘗試分派新的請求。 通過更改請求中的 控制器和/或操作並重置已分派的 標誌,開發人員可以定義要執行的請求鏈。

通過調用setDispatched(false)您基本上說,請求尚未發送到控制器,並且分派器將嘗試重新調度它。這是必要的,因爲您正在更改請求的模塊,控制器和操作,並且您希望Dispatcher再次處理它並將其發送到正確的位置。