Поиск…
Синтаксис
- $ dispatcher-> dispatch (строка $ eventName, событие $ event);
- $ dispatcher-> addListener (строка $ eventName, вызываемый $ listener, int $ priority = 0);
- $ dispatcher-> addSubscriber (EventSubscriberInterface $ subscriber);
замечания
- Часто лучше всего использовать один экземпляр EventDispatcher в вашем приложении, который вы вводите в объекты, которые должны запускать события.
- Лучше всего иметь одно место, где вы управляете конфигурацией и добавляете прослушиватели событий к вашему EventDispatcher. В инфраструктуре Symfony используется контейнер для инъекций зависимостей.
- Эти шаблоны позволят вам легко изменить прослушиватели событий, не изменяя код любого модуля, который отправляет события.
- Развязка диспетчеризации событий от конфигурации прослушивателя событий - вот что делает Symfony EventDispatcher настолько мощным
- EventDispatcher помогает удовлетворить принцип Open / Closed.
Быстрый запуск диспетчера событий
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