2016-07-13 11 views
2

zf2アプリケーションにヘッダ認証を追加しようとしています。リスナをディスパッチイベントにバインドしています。zf2:SharedEventManagerからコントローラへのパラメータ

リスナーはディスパッチ時に正しく実行され、エラーを返し、レスポンスが伝播するのを止めます。

問題は、すべてがうまくいけば、コントローラから取得できるように、リクエストの現在のユーザーパラメータを設定したいと思います。ここで

が今私のコードです:

Module.php

public function onBootstrap(MvcEvent $event) 
    { 
     $app = $event->getApplication(); 
     $sm = $app->getServiceManager(); 
     $em = $app->getEventManager(); 

     $listener = $sm->get('MyAuthListener'); 
     $em->getSharedManager()->attach(
      'eventIdentifierForMyAbstractController', 
      MvcEvent::EVENT_DISPATCH, 
      $listener 
     ); 
    }` 

このリスナーは、作業を行うことになって1です。

public function __invoke(MvcEvent $event) 
{ 

    $result = $this->adapter->authenticate(); 

    if (!$result->isValid()) { 
      //Invalidation process 
    } 
    /validation Process 
    $event->setParam('user', $result->getIdentity()); 
} 

私の側ではほとんどすべてが機能します。 $result->getIdentity()は私に適切なアイデンティティを与えています。 $event->setParam('user', $result->getIdentity())は、リスナー内のイベントにIDを正しく設定します。 (すなわち= {}$this->getEvent()->getParam('user') パラメータが空ですが、私var_dump($result->getIdentity())場合、オブジェクトが完全に作成されます。

しかし、私のコントローラに私がやっているとき。

私はパラメータ$this->getEvent()->getParam('hello', 'hello')を渡すことができ、これはうまくいきます。

私は理由を理解できません。ドキュメントには混在型が予想されるため、OKであるはずです。

さらに詳しい情報が必要な場合はお気軽にお問い合わせください。

答えて

2

コントローラのアクションをディスパッチするリスナーの前に実行するために、リスナーの優先度を高くする必要があります。たとえば、100です。

$em->getSharedManager()->attach(
    'eventIdentifierForMyAbstractController', 
    MvcEvent::EVENT_DISPATCH, 
    $listener, 
    100 
); 
+0

ありがとう、それはトリックでした。また、JsonModelで正しくレンダリングできないため、 '$ user'を適切に抽出する必要がありました。カスタムハイドレーターを使って自分のアイデンティティを解決する。 – Unex

関連する問題