2009-05-29 5 views

答えて

3

私はZFでプログラミングしています。 ここでは、ユーザーがどこにログオンしているかを決定するブートストラップの機能があります。

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()フックを追加します。このプラグインでは、リクエストデータをチェックしたり、ACL内のアクセス権を調べたり、あなたは何をしたいですか?

あなたの選択はあなたです!

編集:あなたの質問を読んで、それはあなたがルートに興味がないように見える - あなたのコードを注入するためにブートストラップの後で最も早いポイントとしてrouteStartup()を使用してください。

0

私はフロントコントローラからルータを取得し、そのassemble()メソッドを呼び出した後、あなたがrouteShutdown」に状態を確認することができますheader() :)

よろしく、

ロブ...

+0

私は実際に投稿する前にそれを試みました。何らかの理由で動作しませんでした(値がない場合)。組み立て方法を使用する前にルータで何かを初期化する必要がありますか? (ありがとう) –

+0

簡単なコードサンプルがありますか? –

0

を使用します"メソッドをプラグインして、$ this-> actionController - > _ helper-> redirector()をリダイレクトして使用してください)

2

リダイレクトが実際にブートストラップファイルにすべきではない...それはあなたのコードで立ち往生して終わるコーダのデバッグの一つ恐ろしい夜になります数年で。

フロントコントローラープラグイン、アクションコントローラープラグインのいずれかを使用するか、アクションコントローラーで行います。最終的にこのようなリダイレクトは避けてください...

+2

なぜ賛成投票ですか? – balupton

+0

なぜそれがブートストラップファイルに含まれていてはなりませんか?詳しく教えてください。 –

関連する問題