2016-07-13 2 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 
     ); 
    }` 

:

여기 지금 내 코드입니다.

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') 매개 변수를 전달할 수 있으며 정상적으로 작동합니다.

이유를 알 수 없습니다. 설명서에 혼합 유형이 예상되므로 잘해야합니다.

자세한 정보가 필요하면 언제든지 문의하십시오.

답변

2

제어기 조치를 디스패치하는 리스너보다 먼저 리스너를 실행하려면 우선 순위를 지정해야합니다. 예 : 100.

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

감사합니다. 또한 JsonModel에서 제대로 렌더링 할 수 없기 때문에'$ user'를 올바르게 추출해야했습니다. 맞춤형 하이드 레이터를 사용하여 신원 확인 솔루션을 구축하십시오. – Unex

관련 문제