Zend 프레임 워크-이벤트 관리자

모든 최신 애플리케이션에는 견고하고 유연한 이벤트 구성 요소가 필요합니다. Zend Framework는 이러한 구성 요소 중 하나를 제공합니다.zend-eventmanager. zend-eventmanager는 높은 수준의 아키텍처를 설계하고 주제 / 관찰자 패턴 및 측면 지향 프로그래밍을 지원합니다.

이벤트 관리자 설치

이벤트 관리자는 다음을 사용하여 설치할 수 있습니다. Composer 아래 명시된대로-

composer require zendframework/zend-eventmanager

이벤트 관리자의 개념

이벤트 관리자의 핵심 개념은 다음과 같습니다.

  • Event − 이벤트는 임의로 이름이 지정된 작업입니다. greet.

  • Listener− 모든 PHP 콜백. 이벤트에 연결되고 이벤트가 트리거 될 때 호출됩니다. 리스너의 기본 서명은 다음과 같습니다.

function(EventInterface $e)
  • EventInterface Class− 이벤트 자체를 지정합니다. 이름 (set / getName), 대상 (get / setTarget) 및 매개 변수 (get / setParams)와 같은 이벤트 정보를 설정하고 가져 오는 메소드가 있습니다.

  • EventManager class− EventManager의 인스턴스는 응용 프로그램과 해당 리스너에서 정의 된 모든 이벤트를 추적합니다. EventManager는 메소드를 제공합니다.attach 이벤트에 리스너를 연결하고 메서드를 제공합니다. trigger사전 정의 된 이벤트를 트리거합니다. 트리거가 호출되면 EventManager는 연결된 리스너를 호출합니다.

  • EventManagerAwareInterface− 클래스가 이벤트 기반 프로그래밍을 지원하려면 EventManagerAwareInterface를 구현해야합니다. 두 가지 방법을 제공합니다.setEventManagergetEventManager 이벤트 관리자를 가져오고 설정합니다.

이벤트 관리자 개념을 이해하기 위해 간단한 PHP 콘솔 애플리케이션을 작성해 보겠습니다. 아래 단계를 따르십시오.

  • "eventapp"폴더를 만듭니다.

  • 설치 zend-eventmanager 작곡가를 사용하여.

  • PHP 파일 만들기 Greeter.php "eventapp"폴더 안에 있습니다.

  • 수업 만들기 Greeter 및 구현 EventManagerAwareInterface.

require __DIR__ . '/vendor/autoload.php'; 
class Greeter implements EventManagerAwareInterface { 
   // code 
}

여기, require Composer가 설치된 모든 구성 요소를 자동로드하는 데 사용됩니다.

쓰기 setEventManager 수업 방법 Greeter 아래와 같이-

public function setEventManager(EventManagerInterface $events) { 
   $events->setIdentifiers([ __CLASS__, get_called_class(),]); $this->events = $events; return $this; 
}

이 메서드는 현재 클래스를 지정된 이벤트 관리자 ($ events 인수)로 설정 한 다음 로컬 변수에 이벤트 관리자를 설정합니다. $events.

다음 단계는 getEventManager 수업 방법 Greeter 아래와 같이-

public function getEventManager() { 
   if (null === $this->events) { $this->setEventManager(new EventManager()); 
   } 
   return $this->events; 
}

이 메서드는 지역 변수에서 이벤트 관리자를 가져옵니다. 사용할 수없는 경우 이벤트 관리자의 인스턴스를 만들고 반환합니다.

방법 작성, greet, 클래스 Greeter.

public function greet($message) { 
   printf("\"%s\" from class\n", $message); $this->getEventManager()->trigger(__FUNCTION__, $this, $message ]); 
}

이 메서드는 이벤트 관리자를 가져와 연결된 이벤트를 발생 / 트리거합니다.

다음 단계는 Greeter 클래스를 만들고 리스너를 메서드에 연결합니다. greet.

$greeter = new Greeter(); $greeter->getEventManager()->attach('greet', function($e) { $event_name = $e->getName(); $target_name = get_class($e->getTarget()); $params_json = json_encode($e->getParams()); printf("\"%s\" event of class \"%s\" is called." . " The parameter supplied is %s\n", $event_name,  
      $target_name, $params_json); 
});

리스너 콜백은 이벤트, 대상 및 제공된 매개 변수의 이름 만 인쇄합니다.

의 전체 목록 Greeter.php 다음과 같습니다-

<?php  
require __DIR__ . '/vendor/autoload.php';  

use Zend\EventManager\EventManagerInterface; 
use Zend\EventManager\EventManager; 
use Zend\EventManager\EventManagerAwareInterface; 

class Greeter implements EventManagerAwareInterface { 
   protected $events; public function setEventManager(EventManagerInterface $events) { 
      $events->setIdentifiers([__CLASS__, get_called_class(), ]); $this->events = $events; return $this; 
   }  
   public function getEventManager() { 
      if (null === $this->events) { $this->setEventManager(new EventManager()); 
      } 
      return $this->events; } public function greet($message) { 
      printf("\"%s\" from class\n", $message); $this->getEventManager()->trigger(__FUNCTION__, $this, [$message ]); 
   } 
} 

$greeter = new Greeter(); $greeter->greet("Hello");  
$greeter->getEventManager()->attach('greet', function($e) { 
   $event_name = $e->getName(); 
   $target_name = get_class($e->getTarget()); 
   $params_json = json_encode($e->getParams()); 
   printf("\"%s\" event of class \"%s\" is called." . " The parameter supplied is %s\n",
      $event_name, $target_name,  
      $params_json); }); $greeter->greet("Hello");

이제 명령 프롬프트 php에서 응용 프로그램을 실행하십시오. Greeter.php 결과는 다음과 같습니다.

"Hello" from class 
"Hello" from class 
"greet" event of class "Greeter" is called. The parameter supplied is ["Hello"]

위의 샘플 애플리케이션은 이벤트 관리자의 기본 사항 만 설명합니다. 이벤트 관리자는 다음과 같은 더 많은 고급 옵션을 제공합니다.Listener Priority, Custom Callback Prototype / Signature, Short Circuiting, 등. 이벤트 관리자는 Zend MVC 프레임 워크에서 광범위하게 사용됩니다.