Прослеживаемый диспетчер событий

Дата обновления перевода 2023-08-21

Прослеживаемый диспетчер событий

TraceableEventDispatcher - это диспетчер событий, обёртывающий любой другой диспетчер событий, который потом можно использовать для определения, какие слушатели событий вызывались диспетчером. Передайте диспетчер событий, который необходимо обернуть, и экземпляр Stopwatch его конструктору:

1
2
3
4
5
6
7
8
9
10
use Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher;
use Symfony\Component\Stopwatch\Stopwatch;

// диспетчер событий для отладки
$dispatcher = ...;

$traceableEventDispatcher = new TraceableEventDispatcher(
    $dispatcher,
    new Stopwatch()
);

Теперь TraceableEventDispatcher может быть использован как любой другой диспетчер событий для регистрации слушателей событий и запуска событий:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// ...

// регистрирует слушатель событий
$eventListener = ...;
$priority = ...;
$traceableEventDispatcher->addListener(
    'event.the_name',
    $eventListener,
    $priority
);

// запускает событие
$event = ...;
$traceableEventDispatcher->dispatch('event.the_name', $event);

После того, как ваше приложение будет обработано, вы можете использовать метод getCalledListeners(), чтобы извлечь массив слушателей событий, который были вызваны в вашем приложении. Похожим образом метод getNotCalledListeners() возвращает массив слушаталей событий, которые не вызывались:

1
2
3
4
// ...

$calledListeners = $traceableEventDispatcher->getCalledListeners();
$notCalledListeners = $traceableEventDispatcher->getNotCalledListeners();