3

私のコントローラーには、FlashMessenger メッセージを統合するための postDispatch があります。

public function postDispatch()
{       
    $messages = $this->_helper->getHelper ( 'FlashMessenger' )
        ->getMessages ();

    if ( $this->_helper->getHelper ( 'FlashMessenger' )
        ->hasCurrentMessages () )
    {
        $messages = array_merge ( $messages, $this->_helper->getHelper ( 'FlashMessenger' )
            ->getCurrentMessages () );
        $this->_helper->getHelper ( 'FlashMessenger' )
            ->clearCurrentMessages ();
    }

    $this->view->alert = $messages;
}

これをControllerプラグインにしたい。

更新:なぜこれが必要なのかを理解しました.JSONコンテキストによって呼び出されたときにJSONでフラッシュメッセージを渡したい. メッセージが View オブジェクトに追加されない限り、メッセージを受け取りません。

メッセージを配列に入れることができましたが、それらをビューに渡す方法がわかりません:

class Plugin_FlashMessenger extends Zend_Controller_Plugin_Abstract
{
    public function postDispatch($request)
    {
        $flashmessenger = Zend_Controller_Action_HelperBroker::getStaticHelper ( 'FlashMessenger' );

        $messages = $flashmessenger->getMessages ();
        if ( $flashmessenger->hasCurrentMessages () )
        {
            $messages = array_merge ( $messages, $flashmessenger->getCurrentMessages () );
            $flashmessenger->clearCurrentMessages ();
        }

        // THIS LINE IS WRONG. HOW DO I SEND $messages TO THE VIEW?
        $this->view->alert = $messages;
    }
}

おまけの質問 - これはこれを達成するための正しい方法ですか? ありがとう!

4

3 に答える 3

12

同じことを検索しているときにあなたの投稿を見つけました。このスレッドに基づいて、それを達成するための 2 つの簡単な方法があります。

1:ブートストラップ中にビューが初期化された場合 (resources.view[] =は にありますapplication.ini)、単純にこれを呼び出すことができます:

$view = Zend_Controller_Front::getInstance()
        ->getParam('bootstrap')
        ->getResource('view');

2:ブートストラップ中にビューが初期化されていない場合:

$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
if (null === $viewRenderer->view) {
    $viewRenderer->initView();
}
$view = $viewRenderer->view;
于 2011-05-25T16:11:05.157 に答える
1

それは間違ったやり方だと思います。FlashMessengerは、あるリクエストから次のリクエストへの通知をほとんど受けません。ビューで利用できます。

したがって、flashmessengerはすでに(上記の目的のために)コントローラーアクションヘルパーです。なぜその上に別のヘルパーを構築したいのですか?:)

したがって、問題は実際にビューにメッセージを表示することです。そのために、すでにビューヘルパーがあります。ヌーメノンから。それは素晴らしいです。

于 2011-02-05T16:22:14.070 に答える
0

すべてのコントローラーでこの機能を取得したいだけの場合は、Zend_Controller_Action を拡張して、ポスト ディスパッチ コードを含む新しいクラスを作成するだけです。

于 2011-02-07T02:11:02.897 に答える