2011-10-21 7 views
1

私のzendプロジェクトでは、このコードはheader.phtmlにあり、すべてのレイアウト/ビューにロードされています。これは、ユーザーセッションに基づいてdivを設定する関数の開始点です。これらの変数に基づいてリダイレクトを追加する必要があります。ユーザーがアクセスしようとしているページ(コントローラ)が、請求コントローラのインデックスアクションにリダイレクトされるようにします。私は各コントローラのインデックスアクションでリダイレクトを設定できることを知っていますが、それは多くのコードです。とにかく私は私のheader.phtmlにリダイレクトを追加することができますか?セッション変数に基づいてログイン時にユーザをリダイレクト

おかげ

<?php 
$userSess= new Zend_Session_Namespace('Default'); 
if(isset($userSess->subscription_state) && isset($userSess->account_type)){ 
    if($userSess->subscription_state == "unpaid" && $userSess->account_type == 1){ 
     ?> 

答えて

2

あなたがやっているものの種類は、おそらくFront Controller Pluginで最善を尽くしています。

レイアウトでテストを処理することで、リクエストを処理してビューをレンダリングするためのコストをすでに食べてしまいました。

対照的に、これらのチェックはディスパッチサイクルの早い段階(例えばpreDispatch())で行います。コントローラをロードしてアクションを処理する必要はありません。

1

私はDavid Weinraubに同意します。あなたは、たとえば、独自のフロントコントローラプラグインでこれを行うことができます。

<?php 

class My_Controller_Plugin_Abc extends Zend_Controller_Plugin_Abstract{ 

public function preDispatch(Zend_Controller_Request_Abstract $request){ 

     $userSess= new Zend_Session_Namespace('Default'); 
     if(isset($userSess->subscription_state) && isset($userSess->account_type)){ 
      if($userSess->subscription_state == "unpaid" && $userSess->account_type == 1){ 
        $this->getResponse()->setRedirect("/index/login")->sendResponse(); 
      } 
     } 

} 

} 

そして

$frontController = Zend_Controller_Front::getInstance();  
$frontController->registerPlugin(new My_Controller_Plugin_Abc()); 
bootstrap.phpの中にプラグインを登録します
関連する問題