2009-05-29 127 views

回答

3

一年多後,我在ZF編程,我爲您的問題得到了這個解決方案。 這是我的bootstrap函數,它決定了用戶登錄的位置。

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 

{

protected $_front; 

(...) 

protected function _initViewController() 
{ 
    (...) 

    $this->bootstrap('FrontController'); 
    $this->_front = $this->getResource('FrontController'); 

    (...) 
} 

protected function _initLogado() 
{ 
    $router = $this->_front->getRouter(); 
    $req = new Zend_Controller_Request_Http(); 
    $router->route($req); 
    $module = $req->getModuleName(); 

    $auth = Zend_Auth::getInstance(); 
    if ($auth->hasIdentity()) { 
     $this->_view->logado = (array) $auth->getIdentity(); 
    } else { 
     $this->_view->logado = NULL; 
     if ($module == 'admin') { 
      $response = new Zend_Controller_Response_Http(); 
      $response->setRedirect('/'); 
      $this->_front->setResponse($response); 
     } 
    } 
} 

}

0

最好的辦法可能是一個Controller Plugin

可以。添加一個在路由發生後調用的routeShutdown()鉤子,但是在你的控制器被調用的action方法之前,你可以在這個插件中檢查請求數據,或者在ACL中查找權限,或者只是隨機重定向你想要什麼!

選擇是你的!

編輯:重新讀你的問題,它看起來像你甚至沒有興趣的路線 - 使用routeStartup()作爲引導後注入代碼後的最早點。

0

我會抓住從前端控制器,路由器並調用其assemble()方法,然後使用header() :)

問候,

搶...

+0

我實際上在發佈之前嘗試過。沒有工作出於某種原因(沒有價值的地方)。在使用匯編方法之前,我必須在路由器中初始化一些東西嗎? (謝謝) – 2009-05-30 03:32:31

+0

有一個簡單的代碼示例? – 2009-07-24 06:03:13

0

您可以檢查「routeShutdown條件「方法在插件,然後使用$ this-> actionController - > _ helper-> redirector()來重定向;)

2

重定向其實它不應該在引導文件...這將是調試編碼器的一個可怕的夜晚是最終套牢你的代碼幾年內。

使用前控制器插件,動作控制器插件或在您的動作控制器中執行此操作。最終這樣的重定向應該完全避免...

相關問題