2

Zend フレームワークは初めてで、問題があります。次のような関数を実装するコントローラー抽象クラスを作成しました。

protected function AddError($message) {
    $flashMessenger = $this->_helper->FlashMessenger;
    $flashMessenger->setNamespace('Errors');
    $flashMessenger->addMessage($message);
    $this->view->Errors = $flashMessenger->getMessages();
}

protected function activateErrors()
{
    $flashMessenger = $this->_helper->FlashMessenger;
    $flashMessenger->setNamespace('Errors');
    $this->view->Errors = $flashMessenger->getMessages();
}

したがって、コントローラーごとに $this->AddError($error); を使用できます。そして、レイアウトに $error をレンダリングします。したがって、すべてのコントローラーで flashMesenger を処理したくありません。

ただし、各アクションが実行されるときに activateErrors を実行する必要があります。

例えば

コントローラーのテストがあります

クラスTestControllerはMyControllerを拡張します{

public function indexAction() {

    $this->AddError("Error 1");
    $this->AddError("Error 2");
    $this->activateErrors();
}


public function index1Action() {

    $this->AddError("Esdsd 1");
    $this->AddError("sddsd 2");
    $this->activateErrors();
}   

}

コードを複製せずに、アクションの最後にすべてのコントローラーの各アクションでこの activateErrors を実行できる方法はありますか?

つまり、すべてのアクションにこのコードを含めたくないということです。私の抽象クラス MyController にそれを含める方法があるかもしれません。

誰かアイデアはありますか?

ありがとう

4

2 に答える 2

1

親でpostDispatch フックを使用するのはどうMyControllerですか?

そのページを引用する:

Zend_Controller_Actionは、要求されたアクションを予約するために呼び出すことができる 2 つのメソッドを指定しpreDispatch() ます postDispatch()
これらはさまざまな方法で役立ちます。たとえば、アクションを実行する前に認証と ACL を確認する( を呼び出す _forward()preDispatch()、アクションはスキップされます) 、生成されたコンテンツをサイト全体のテンプレートに配置する( postDispatch())などです。

多分これはトリックを行うかもしれませんか?

于 2009-09-27T14:35:08.903 に答える
0

私は実際に、あなたが探している多くの機能を提供するFlashMessenger の機能強化に貢献しました。

于 2011-06-07T21:01:44.110 に答える