2014-03-04 3 views
0

Zendframework 2, 이벤트 관리자 및 리스너에 대한 질문이 있습니다.젠드 프레임 워크 2 : AbstractListenerAggregate

class ApiErrorListener extends AbstractListenerAggregate { 
    public function attach(EventManagerInterface $events) 
    { 
     $this->listeners[] = $events->attach(MvcEvent::EVENT_RENDER, __CLASS__ . '::onRender', 1000); 
    } 

    public static function onRender(MvcEvent $e) 
    { 
     if($e->getResponse()->isOk()) 
     { 
      return; 
     } 

     $httpCode = $e->getResponse()->getStatusCode(); 
     $sm = $e->getApplication()->getServiceManager(); 
     $viewModel = $e->getResult(); 
     $exception = $viewModel->getVariable('exception'); 

     $model = new JsonModel(
      array(
       'errorCode' => !empty($exception) ? $exception->getCode() : $httpCode, 
       'errorMsg' => !empty($exception) ? $exception->getMessage() : NULL 
      ) 
     ); 

     $model->setTerminal(true); 

     $e->setResult($model); 
     $e->setViewModel($model); 
     $e->getResponse()->setStatusCode($httpCode); 
    } 

} 

나는 ApiErrorListener가 청취자이거나 관찰자라고 말합니다. 왜 attach() 함수를 구현해야합니까? 이 링크에서

Observer Design Pattern

, 당신은 단지 제목 (방송 첨부 또는 청취자를 분리) 볼 수 있습니다. 혼란 스러울 것 같아 ...

누구든지 도와주세요.

미리 감사드립니다.

답변

0

AbstractListenerAggregate는 범위와 목적이 비슷한 이벤트 그룹을 첨부/분리하는 기능을 제공합니다.

이것은 기능보다는 조직 클래스입니다. 이벤트를 첨부하고 분리하는 쉬운 방법을 제공합니다. 이벤트 분리의 경우 모든 등록 된 이벤트를 반복하고 찾고있는 이벤트를 찾기 위해 복잡한 논리없이 이벤트 그룹을 분리하는 쉬운 방법을 제공합니다.

리스너 집계를 사용할 필요가 없으므로 응용 프로그램에서 원하는 위치에 이벤트를 EventManager에 첨부 할 수 있습니다. 그러나 응용 프로그램이 커지고 점점 더 많은 종속성을 갖는 이벤트가 발생하면 이벤트 논리에 약간의 온 전성 (테스트 성)을 제공 할 수 있습니다.

관련 문제