2013-05-17 10 views
7

トリガーするイベントを取得中に問題が発生しました。ここに私のコード...ZF2イベントトリガー

controller.php

function get($id) 
{ 
    $this->getEventManager()->trigger('hmac.check'); 
} 

このトリガーは、それが添付されていてもhmac.checkイベントを実行しません走っているです。

module.php

class Module 
{ 
    /** 
    * Init the methods 
    * 
    * @param ModuleManager $moduleManager 
    */ 
    public function init(ModuleManager $mm) 
    { 
     $mm->getEventManager() 
      ->attach(
       'hmac.check', 
       function(MvcEvent $evt) 
       { 
        echo "The trigger has worked"; 
        $key = $evt->getParams()->fromHeader('key'); 
        $ts = $evt->getParams()->fromHeader('when'); 
        $uri = $evt->getParams()->fromHeader('uri'); 

        $hmac = new \Scc\Hmac\Hmac(new HmacConfig, new HmacStorage); 
       } 
     ); 
    } 
} 

私は$ mmの前または後にメッセージをエコーし​​た場合> getEventManager->()を添付。それは、私はそれがinitメソッドを実行している知っているテストの罰金を表示します。

これについての助けがあれば助かります。事前

EDITに

ありがとう:それはすべての違いを作る場合、これは安らかコントローラである (私はそれがないとは思いません)。

答えて

9

ModuleManagerEventManagerインスタンスにリスナーを接続していて、メインApplication EventManagerではなくリスナーを接続しているという問題があります。

モジュールinit()から直接アプリケーションイベントマネージャに接続する方法はありません。モジュールマネージャにはアクセスできません。そのため、ModuleManagerのEventManagerからSharedManagerを取得し、そのイベントリスナーを。

Zend\Mvc\Controller\AbstractRestfulControllerに拡張されたコントローラーによってトリガーされたときにhmac.checkイベントをリッスンすることで、これを実行する例がありますが、そのコントローラーをコントローラFQCNに置き換えることで特定のコントローラーを聴くことができます。

class Module 
{ 
    /** 
    * Init the methods 
    * 
    * @param ModuleManager $moduleManager 
    */ 
    public function init(ModuleManager $mm) 
    { 
     $mm->getEventManager()->getSharedManager() 
      ->attach(
       'Zend\Mvc\Controller\AbstractRestfulController', 'hmac.check', 
       function(MvcEvent $evt) 
       { 
        echo "The trigger has worked"; 
        $key = $evt->getParams()->fromHeader('key'); 
        $ts = $evt->getParams()->fromHeader('when'); 
        $uri = $evt->getParams()->fromHeader('uri'); 

        $hmac = new \Scc\Hmac\Hmac(new HmacConfig, new HmacStorage); 
       } 
     ); 
    } 
} 
+2

ありがとうございます、それは治療を働かせます:) – mic

+1

どうやってこれを稼働させましたか?引数1がZend \ Mvc \ MvcEventのインスタンスである必要があります。Zend \ ModuleManager \ ModuleEventのインスタンスが – emolah

+1

@emolahの場合、ModuleEventインスタンスが取得されている場合は、答えに与えられたコードの代わりに、質問に使われたコード。 – Crisp