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를 구현해야합니다. 두 가지 방법을 제공합니다.setEventManager 과 getEventManager 이벤트 관리자를 가져오고 설정합니다.
예
이벤트 관리자 개념을 이해하기 위해 간단한 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 프레임 워크에서 광범위하게 사용됩니다.