2010-12-03 14 views
1

私はZend Frameworkでしばらく働いており、現在私のコードの一部をリファクタリングしています。私が大切にしたいのは、私のabstractコントローラークラスです。このクラスでは、すべてのコントローラーに存在する必要がある多くの変数($success$warning$errorなど)を開始します。この部分はコントローラプラグインで実行できますが、これらの変数を関連ビューに送信する最も良い方法は何でしょうか。私は私のすべてのコントローラ内から呼び出す私のabstractコントローラクラスでカスタムメソッドを使用しています。その後、私はこのZendFrameworkコントローラからビューに変数を送信する(ベスト・プラクティス)

+0

お願いします。あなたはプラグインコントローラの作成を手伝ってほしいですか? –

答えて

5

あなたに適したプラグインコントローラまたは何かを通じて、このプロセスを自動化するために探していたthrought

parent::sendViewData(); 

私のコントローラのすべてのすべてのアクションで呼び出され

protected function sendViewData(){ 
    $this->view->success = $this->success; 
    $this->view->warning = $this->warning; 
    $this->view->error = $this->error; 
} 

抽象コントローラでpostDisplatchメソッドを設定して、ビューデータを初期化することができます(「プレディスパッチフックとポストディスパッチフック」を参照)。

このようにして、各アクションで$this->success,$this->warnningまたは$this->errorという変数を初期化できます。アクションが実行された後でビューに渡されます。

+1

しかし、postDispatchメソッドをオーバーライドする場合は、具体的なコントローラでparent :: postDispatch()を呼び出さなければならないことに注意してください。 –

+0

これまで私はpostDispatchメソッドを認識していなかったので、問題はありませんが、指摘してくれてありがとうございます。D –

2

pacticeは、直接この

// IndexController.php 
class IndexController extends ApplicationController { 

} 
ようになる Zend_Controller_Action方法に

// Your base controller file ApplicationController.php 
class ApplicationController extends Zend_Controller_Action { 
     // method & variable here are available in all controllers 
     public function preDispatch() { 
      $this->view->success = $this->success; 
      $this->view->warning = $this->warning; 
      $this->view->error = $this->error; 
     } 
} 

あなたの他の正常なコントローラを呼び出すのではなく、ベースコントローラを定義し、他のコントローラはこれを拡張してみましょうですベスト

この変数(成功、警告&エラー)は、すべてのビュー/レイアウトファイルで使用可能です。ApplicationController.php他のコントローラの共有機能を保持することもできます。

関連する問題