Zend Framework 2.0 이벤트 매니저 시작 자습서
EventManager는 다음과 같은 용도로 설계된 어셈블리입니다.
/
기본적인 구조는 지정된 사건의 탐지기를 추가하고 해제할 수 있습니다. 하나의 실례적인 기초든 공유된 집합이든.이벤트 트리거탐지기의 집행을 중지하다.
빠른 시작
일반적으로, 클래스에 이벤트매니저를 만듭니다.
use Zend\EventManager\EventManagerInterface;
use Zend\EventManager\EventManager;
use Zend\EventManager\EventManagerAwareInterface;
class Foo implements EventManagerAwareInterface
{
protected $events;
public function setEventManager(EventManagerInterface $events)
{
$events->setIdentifiers(array(
__CLASS__,
get_called_class(),
));
$this->events = $events;
return $this;
}
public function getEventManager()
{
if (null === $this->events) {
$this->setEventManager(new EventManager());
}
return $this->events;
}
}
위의 코드는 사용자가 EventManager 인스턴스에 액세스하거나 새 인스턴스를 사용하여 재설정할 수 있도록 합니다.만약 존재하지 않는다면, 그것은 사용될 때 타성 실례화될 것이다.
EventManager는 이벤트가 발생했는지에 대해서만 관심을 가질 수 있습니다.기초적인 트리거는 세 가지 인자를 받아들인다. 이벤트의 이름이다. 이것은 보통 현재의 함수/방법명이다.상하문, 그것은 통상적으로 현재 대상의 실례이다.현재 함수/방법에 제공되는 매개 변수입니다.
class Foo
{
// ... assume events definition from above
public function bar($baz, $bat = null)
{
$params = compact('baz', 'bat');
$this->getEventManager()->trigger(__FUNCTION__, $this, $params);
}
}
순서대로 사건을 촉발하는 데는 사건 수사에 관심이 있을 뿐이다.탐지기가 Event Manager에 추가되어 지정한 이벤트와 알림할 리셋을 지정합니다.리셋은 이벤트 이름, 상하문, 파라미터를 가져오는 데 사용되는 액세서리가 있는 이벤트 대상을 받아들인다.탐지기를 추가하고 사건을 촉발합시다.
use Zend\Log\Factory as LogFactory;
$log = LogFactory($someConfig);
$foo = new Foo();
$foo->getEventManager()->attach('bar', function ($e) use ($log) {
$event = $e->getName();
$target = get_class($e->getTarget());
$params = json_encode($e->getParams());
$log->info(sprintf(
'%s called on %s, using params %s',
$event,
$target,
$params
));
});
// Results in log message:
$foo->bar('baz', 'bat');
// reading: bar called on Foo, using params {"baz" : "baz", "bat" : "bat"}"
attach()의 두 번째 매개 변수는 유효한 리셋입니다.예에서 예가 스스로 포함된 것을 유지하기 위해 익명 함수를 보여 주었다.그러나, 당신은 유효한 함수 이름, 함수 대상, 정적 방법을 인용하는 문자열, 또는 지정된 정적 방법이나 실례적인 방법을 가진 리셋 그룹을 사용할 수 있습니다.다시 한 번, 모든 PHP 리셋은 유효합니다.
때때로 이벤트매니저를 만든 클래스가 없는 탐지기를 지정하려고 할 수도 있습니다.Zend Framework는 Shared Event Collection 개념을 통해 이를 실현합니다.간단하게 말하면, 당신은 모두가 알고 있는 Shared Event Collection을 사용하여 독립된 Event Manager 실례를 주입할 수 있으며, Event Manager 실례는 추가 탐지기에 의해 그것을 조회할 수 있다.SharedEventCollection에 추가된 탐지기는 정상적인 이벤트 관리자와 거의 같습니다.attach 호출은 Event Manager와 동일하지만 시작하려면 지정된 인스턴스와 추가 매개변수가 필요합니다.Event Manager를 만드는 실례를 기억합니다. 우리가 그에게 어떻게 전달했는지CLASS__의Shared Event Collection을 사용할 때, 그 값, 또는 구조자에게 제공하는 모든 문자열은 실례를 식별하는 데 사용될 수 있습니다.예를 들어 Shared Event Manager 실례가 있다면, 우리는 이미 우리의 Event Manager 실례에 주입되었다는 것을 알고 있다. (실례에 대해서는 의존 주입을 통해) 위의 예를 바꾸어 공유 집합을 통해 추가할 수 있다.
use Zend\Log\Factory as LogFactory;
// Assume $events is a Zend\EventManager\SharedEventManager instance
$log = LogFactory($someConfig);
$events->attach('Foo', 'bar', function ($e) use ($log) {
$event = $e->getName();
$target = get_class($e->getTarget());
$params = json_encode($e->getParams());
$log->info(sprintf(
'%s called on %s, using params %s',
$event,
$target,
$params
));
});
// Later, instantiate Foo:
$foo = new Foo();
$foo->getEventManager()->setSharedEventCollection($events);
// And we can still trigger the above event:
$foo->bar('baz', 'bat');
// results in log message:
// bar called on Foo, using params {"baz" : "baz", "bat" : "bat"}"
참고: StaticEventManager
2.0.0beta3에서 Static Event Manager 단례를 Shared Event Collection으로 사용할 수 있습니다.이렇게 하면Shared Event Collection에 어떻게 접근하는지 걱정할 필요가 없습니다.StaticEventManager::getInstance () 를 간단하게 호출하면 전역적으로 사용할 수 있습니다.
그러나 프레임워크는 사용에 찬성하지 않으며 2.0.0beta4에서는 Shared Event Manager 실례를 설정하고 단독 Event Manager 실례에 주입해서 대체할 수 있음을 알아야 한다.
와일드카드 탐지기
때때로 당신은 주어진 실례의 많은 사건이나 모든 사건에 같은 탐지기를 추가하거나, 공유 이벤트 집합, 많은 상하문, 그리고 많은 사건을 사용할 수도 있습니다.EventManager 구성 요소에서는 이렇게 할 수 있습니다.
한 번에 여러 이벤트 추가
$events = new EventManager();
$events->attach(array('these', 'are', 'event', 'names'), $callback);
와일드카드를 통해 추가
$events = new EventManager();
$events->attach('*', $callback);
만약 당신이 우선순위를 지정한다면, 그 우선순위는 이 탐지기가 촉발하는 모든 사건에 사용될 것입니다.
위의 코드는 언제든지 터치하면 이 특정 탐지기의 알림을 가져올 수 있도록 지정합니다.
SharedEvent Manager를 통해 한 번에 여러 이벤트 추가
$events = new SharedEventManager();
// Attach to many events on the context "foo"
$events->attach('foo', array('these', 'are', 'event', 'names'), $callback);
// Attach to many events on the contexts "foo" and "bar"
$events->attach(array('foo', 'bar'), array('these', 'are', 'event', 'names'), $callback);
만약 당신이 우선순위를 지정한다면, 그 우선순위는 모든 지정한 이벤트에 사용될 것입니다.
SharedEvent Manager를 통해 한 번에 모든 이벤트 추가
$events = new SharedEventManager();
// Attach to all events on the context "foo"
$events->attach('foo', '*', $callback);
// Attach to all events on the contexts "foo" and "bar"
$events->attach(array('foo', 'bar'), '*', $callback);
만약 당신이 우선순위를 지정한다면, 그 우선순위는 모든 지정한 이벤트에 사용될 것입니다.
위의 코드는 상하문'foo'와'bar'를 지정합니다. 지정한 탐지기는 모든 사건이 터치될 때 알립니다.
구성 옵션
EventManager 옵션
식별자
주어진 Event Manager 인스턴스에서 응답할 수 있는 문자열 또는 문자열 배열은 Shared Event Manager를 통해 액세스할 때 표시됩니다.
event_class
대안 이벤트 클래스의 이름은 탐지기에 전달된 사건을 대표하는 데 사용됩니다.
shared_collections
이벤트를 트리거할 때 SharedEventCollection 인스턴스
사용 가능한 방법
__construct
__construct(null|string|int Sidentifier)
새로운 이벤트 매니저 실례를 만들고 주어진 식별자를 사용합니다. 만약 제공된다면 집합을 공유하기 위해서입니다.
setEventClass
setEventClass(string $class)
트리거에 전달되는 이벤트를 만들 때 사용할 이벤트 클래스의 이름을 바꿉니다.
setSharedCollections
setSharedCollections(SharedEventCollection $collections=null)
이벤트를 트리거하는 데 사용되는 SharedEventCollection 인스턴스입니다.
getSharedCollections
getSharedCollections()
현재 추가된 SharedEventCollection 인스턴스를 반환합니다.컬렉션을 추가하지 않으면 빈 상태로 돌아가거나 Shared Event Collection 인스턴스를 반환합니다.
trigger
trigger(string $event, mixed $target, mixed $argv, callback $callback)
지정한 이벤트의 모든 탐지기를 터치합니다.$이벤트에 현재 함수/방법명을 사용하고'.pre','.post'등 뒤에 필요하면 추가하는 것을 추천합니다. $context는 현재 대상의 실례나 함수의 이름이어야 합니다. 대상이 터치하지 않으면. $params는 일반적으로 연관된 배열 또는 ArrayAccess 인스턴스여야 합니다.우리는 함수/방법에 전달되는 매개 변수 (compact () 를 사용하는 것을 추천합니다.이 방법도 리셋을 받아들일 수 있고 triggerUntil () 과 같다.
방법은 다양한 탐지기가 되돌아오는 값을 반성하고 단락을 테스트하며 더 많은 것을 할 수 있는 ResponseCollection의 실례를 되돌려줍니다.
triggerUntil
triggerUntil(string $event, mixed $context, mixed $argv, callback $callback)
지정한 이벤트의 모든 탐지기를 트리거합니다. trigger () 와 같이, 모든 탐지기의 반환값을 $callback에 전달합니다.$callback이 블러드 값을 되돌려주면 탐지기의 실행이 종료됩니다.$result->stoped () 를 사용하여 그것을 테스트할 수 있습니다.
attach
attach(string $event, callback $callback, int $priority)
$callback을 이벤트 매니저 실례에 추가하고 이벤트 $이벤트를 탐지합니다.$priority를 제공하면, 탐지기는 그 우선순위를 내부의 탐지기 창고에 삽입합니다.높은 값이 먼저 실행됩니다.기본 우선 순위는 1이며 마이너스 값을 사용하여 실행됩니다.
메서드는 Zend\Stdlib\CallbackHandler의 인스턴스를 반환합니다.이 값은 필요하면detach () 에 전달할 수 있습니다.
attachAggregate
attachAggregate(string|ListenerAggregate $aggregate)
문자열이 $aggregate로 전달되면 그 종류를 실례화합니다. $aggregate가 Event Manager의 실례로 전달되는 attache () 방법인 만큼 그는 탐지기를 등록할 수 있다.
ListenerAggregate 인스턴스로 돌아갑니다.
detach
detach(CallbackHandler $listener)
모든 탐지기를 스캔하고 $listener와 일치하는 모든 탐지기를 취소합니다. 따라서 더 이상 터치되지 않습니다.
트루블 값을 되돌려줍니다. 탐지기가 지정되어 구독을 취소했다면, 그렇지 않으면false 블 값을 되돌려줍니다.
detachAggregate
detachAggregate(ListenerAggregate $aggregate)
모든 사건을 순환해서 집합을 대표하는 탐지기 확인하기;모든 일치하는 항목에 대해 탐지기가 제거됩니다.
모든 탐지기가 확인되고 구독이 취소되면true블로 값을 되돌려줍니다. 그렇지 않으면false블로 값을 되돌려줍니다.
getEvents
getEvent()
탐지기에 추가된 모든 이벤트 이름의 그룹을 되돌려줍니다.
getListeners
getListeners(string $event)
$event에 추가된 모든 탐지기의 Zend\Stdlib\PriorityQueue 인스턴스를 반환합니다.
clearListeners
clearListeners(string $event)
$이벤트에 추가된 모든 탐지기를 제거합니다.
prepareArgs
prepareArgs(array $args)
제공된 $args에서 ArrayObject를 만듭니다.만약 당신의 탐지기를 원한다면, 파라미터를 변경해서 잠시 후의 탐지기나 터치하는 방법을 볼 수 있도록 하면 매우 유용할 것입니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.