1

私はしばらくの間ZendFrameworkで作業しており、現在、コードの一部をリファクタリングしています。私が排除したい大きなことの1つは、、、などabstractのすべてのコントローラーに存在する必要がある多くの変数を開始するコントローラークラスです。この部分はコントローラープラグインで実行できますが、これらの変数を関連するビューに送信するための最良の方法は何でしょうか。現在、すべてのコントローラー内から呼び出すコントローラークラスでカスタムメソッドを使用しています。$success$warning$errorabstract

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

これは、すべてのコントローラーのすべてのアクションで呼び出されます。

parent::sendViewData();

私はプラグインコントローラーまたはこれにより適したものを介してこのプロセスを自動化することを探していました

4

2 に答える 2

5

抽象コントローラーでpostDisplatchメソッドを設定して、ビューデータを初期化できます(「ディスパッチ前およびディスパッチ後のフック」のセクションを参照)。

そうすれば、各アクションで$this->success$this->warnningまたは$this->error変数を初期化でき、アクションの実行後にビューに渡されます。

于 2010-12-03T18:54:27.130 に答える
2

最良の方法は、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;
        }
}

他の通常のコントローラーは次のようになります

// IndexController.php
class IndexController extends ApplicationController {

}

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

于 2010-12-03T19:29:55.830 に答える