2013-05-14 7 views
8

具体的には、Module.phpファイル内にFlashMessengerプラグインフォームを使用しようとしています。Zend Framework 2では、コントローラーの外でコントローラープラグインを使用する方法

は今の私のApplication/Module.phpファイル内のメソッドは次のようになりますので、$ E-> getController()

public function checkAcl(MvcEvent $e) { 
    // code to determine route and role ... 

    if (!$e->getViewModel()->acl->isAllowed($userRole, $route)) { 
     $flashMessenger = $e->getController()->plugin('flashMessenger'); 
     $flashMessenger->addMessage('You must be logged in'); 

     // code to redirect to login page ... 
    } 
} 

しかし、それは動作していない文字列ではなく、コントローラオブジェクトを返しています。コントローラまたはプラグインに直接アクセスするヘルプは高く評価されます。

答えて

14

あなたはそうのようなあなたのModule.phpで、イベントハンドラからflashMessengerのインスタンスを取得するためにControllerPluginManagerを使用することができます。

public function myEventHandler(MvcEvent $e) { 
    $sm = $e->getApplication()->getServiceManager(); 
    $flash = $sm->get('ControllerPluginManager')->get('flashMessenger'); 
    $flash->addErrorMessage('test'); 
    // ... 
} 

は明らかにあなたが任意のコントローラプラグインのためにこれを行うことができます。

0

ので、エセキエル・ソリューションは、私のために正常に動作あるいは、あなたは以下を使用することができます。

あなたが

use Zend\Mvc\Controller\Plugin\FlashMessenger; 

Module.php

でクラスを使用していることを確認してください:

$flash=new FlashMessenger(); 
$flash->addErrorMessage("hello"); 

私は現在エズキエルのものを使用しています。

+1

hasMessages()またはgetMessages()を呼び出すと、FlashMessengerはすべてのメッセージをセッションからローカルのFlashMessengerオブジェクトにプルします(FlashMessenger.phpのgetMessagesFromContainer関数を参照)。 新しいFlashMessengerをインスタンス化し、その間にアプリケーションの何かがService Managerのインスタンス上でhasMessagesまたはgetMessagesを呼び出した場合、新しく作成されたインスタンスは空になります。上記のコードで最初に起きた場合、将来のインスタンスは空になります(最初のインスタンスがメッセージを取得します)。 –

+0

チップありがとう@マークT – Conti

関連する問題