수색…


통사론

  • $ dispatcher-> dispatch (string $ eventName, Event $ event);
  • $ dispatcher-> addListener (string $ eventName, 호출 가능 $ listener, int $ priority = 0);
  • $ dispatcher-> addSubscriber (EventSubscriberInterface $ subscriber);

비고

  • 이벤트를 발생시키는 데 필요한 객체에 주입하는 EventDispatcher의 단일 인스턴스를 응용 프로그램에서 사용하는 것이 가장 좋습니다.
  • EventDispatcher의 구성을 관리하고 EventDispatcher에 이벤트 리스너를 추가하는 단일 위치를 갖는 것이 가장 좋습니다. Symfony 프레임 워크는 Dependency Injection Container를 사용합니다.
  • 이러한 패턴을 사용하면 이벤트를 전달하는 모듈의 코드를 변경하지 않고도 이벤트 리스너를 쉽게 변경할 수 있습니다.
  • 이벤트 리스너 구성에서 이벤트 디스패치를 ​​분리하면 Symfony EventDispatcher가 매우 강력 해집니다.
  • EventDispatcher는 Open / Closed Principle을 만족하도록 도와줍니다.

이벤트 디스패처 빠른 시작

use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\EventDispatcher\GenericEvent;

// you may store this in a dependency injection container for use as a service
$dispatcher = new EventDispatcher();

// you can attach listeners to specific events directly with any callable
$dispatcher->addListener('an.event.occurred', function(Event $event) {
    // process $event
});

// somewhere in your system, an event happens
$data = // some important object
$event = new GenericEvent($data, ['more' => 'event information']);

// dispatch the event
// our listener on "an.event.occurred" above will be called with $event
// we could attach many more listeners to this event, and they too would be called
$dispatcher->dispatch('an.event.occurred', $event);

이벤트 구독자

use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\EventDispatcher\Event;

$dispatcher = new EventDispatcher();

// you can attach event subscribers, which allow a single object to subscribe 
// to many events at once
$dispatcher->addSubscriber(new class implements EventSubscriberInterface {
    public static function getSubscribedEvents()
    {
        // here we subscribe our class methods to listen to various events
        return [
            // when anything fires a "an.event.occurred" call "onEventOccurred"
            'an.event.occurred' => 'onEventOccurred',
            // an array of listeners subscribes multiple methods to one event
            'another.event.happened' => ['whenAnotherHappened', 'sendEmail'],
        ];
    }

    function onEventOccurred(Event $event) {
        // process $event
    }

    function whenAnotherHappened(Event $event) {
        // process $event
    }

    function sendEmail(Event $event) {
        // process $event
    }
});


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow