Skip to content

Commit 6991ff6

Browse files
committed
feature #16198 [EventDispatcher] added EventDispatcher::getListenerPriority() (fabpot)
This PR was merged into the 2.8 branch. Discussion ---------- [EventDispatcher] added EventDispatcher::getListenerPriority() | Q | A | ------------- | --- | Bug fix? | yes | New feature? | yes | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | #14563, #15825 | License | MIT | Doc PR | n/a In #14563, we added a way to get the priorities of listeners, but as noted by @Tobion in #15825, the implementation is sub-optimal because of two main reasons: the change is not part of the interface but more importantly, the added boolean changes the return value of `getListeners()`. This PR reverts most of #14563 to add a `getListenerPriority()` method. This method is quite slow, but as it should only be used for debugging purposes (on the CLI or the WDT), I think it's not really a problem. In 3.0, this method should probably be added to `EventDispatcherInterface`. ping @Tobion Commits ------- 068e955 [EventDispatcher] added EventDispatcher::getListenerPriority()
2 parents 89bfa26 + ee70303 commit 6991ff6

File tree

4 files changed

+33
-53
lines changed

4 files changed

+33
-53
lines changed

Console/Descriptor/JsonDescriptor.php

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -294,27 +294,21 @@ private function getEventDispatcherListenersData(EventDispatcherInterface $event
294294
{
295295
$data = array();
296296

297-
$registeredListeners = $eventDispatcher->getListeners($event, true);
297+
$registeredListeners = $eventDispatcher->getListeners($event);
298298
if (null !== $event) {
299-
krsort($registeredListeners);
300-
foreach ($registeredListeners as $priority => $listeners) {
301-
foreach ($listeners as $listener) {
302-
$listener = $this->getCallableData($listener);
303-
$listener['priority'] = $priority;
304-
$data[] = $listener;
305-
}
299+
foreach ($registeredListeners as $listener) {
300+
$l = $this->getCallableData($listener);
301+
$l['priority'] = $eventDispatcher->getListenerPriority($event, $listener);
302+
$data[] = $l;
306303
}
307304
} else {
308305
ksort($registeredListeners);
309306

310307
foreach ($registeredListeners as $eventListened => $eventListeners) {
311-
krsort($eventListeners);
312-
foreach ($eventListeners as $priority => $listeners) {
313-
foreach ($listeners as $listener) {
314-
$listener = $this->getCallableData($listener);
315-
$listener['priority'] = $priority;
316-
$data[$eventListened][] = $listener;
317-
}
308+
foreach ($eventListeners as $eventListener) {
309+
$l = $this->getCallableData($eventListener);
310+
$l['priority'] = $eventDispatcher->getListenerPriority($eventListened, $eventListener);
311+
$data[$eventListened][] = $l;
318312
}
319313
}
320314
}

Console/Descriptor/MarkdownDescriptor.php

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -273,30 +273,23 @@ protected function describeEventDispatcherListeners(EventDispatcherInterface $ev
273273

274274
$this->write(sprintf('# %s', $title)."\n");
275275

276-
$registeredListeners = $eventDispatcher->getListeners($event, true);
276+
$registeredListeners = $eventDispatcher->getListeners($event);
277277
if (null !== $event) {
278-
krsort($registeredListeners);
279-
$order = 1;
280-
foreach ($registeredListeners as $priority => $listeners) {
281-
foreach ($listeners as $listener) {
282-
$this->write("\n".sprintf('## Listener %d', $order++)."\n");
283-
$this->describeCallable($listener);
284-
$this->write(sprintf('- Priority: `%d`', $priority)."\n");
285-
}
278+
foreach ($registeredListeners as $order => $listener) {
279+
$this->write("\n".sprintf('## Listener %d', $order + 1)."\n");
280+
$this->describeCallable($listener);
281+
$this->write(sprintf('- Priority: `%d`', $eventDispatcher->getListenerPriority($event, $listener))."\n");
286282
}
287283
} else {
288284
ksort($registeredListeners);
289285

290286
foreach ($registeredListeners as $eventListened => $eventListeners) {
291287
$this->write("\n".sprintf('## %s', $eventListened)."\n");
292-
krsort($eventListeners);
293-
$order = 1;
294-
foreach ($eventListeners as $priority => $listeners) {
295-
foreach ($listeners as $listener) {
296-
$this->write("\n".sprintf('### Listener %d', $order++)."\n");
297-
$this->describeCallable($listener);
298-
$this->write(sprintf('- Priority: `%d`', $priority)."\n");
299-
}
288+
289+
foreach ($eventListeners as $order => $eventListener) {
290+
$this->write("\n".sprintf('### Listener %d', $order + 1)."\n");
291+
$this->describeCallable($eventListener);
292+
$this->write(sprintf('- Priority: `%d`', $eventDispatcher->getListenerPriority($eventListened, $eventListener))."\n");
300293
}
301294
}
302295
}

Console/Descriptor/TextDescriptor.php

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -358,15 +358,14 @@ protected function describeEventDispatcherListeners(EventDispatcherInterface $ev
358358

359359
$options['output']->title($title);
360360

361-
$registeredListeners = $eventDispatcher->getListeners($event, true);
362-
361+
$registeredListeners = $eventDispatcher->getListeners($event);
363362
if (null !== $event) {
364-
$this->renderEventListenerTable($registeredListeners, $options['output']);
363+
$this->renderEventListenerTable($eventDispatcher, $event, $registeredListeners, $options['output']);
365364
} else {
366365
ksort($registeredListeners);
367366
foreach ($registeredListeners as $eventListened => $eventListeners) {
368367
$options['output']->section(sprintf('"%s" event', $eventListened));
369-
$this->renderEventListenerTable($eventListeners, $options['output']);
368+
$this->renderEventListenerTable($eventDispatcher, $eventListened, $eventListeners, $options['output']);
370369
}
371370
}
372371
}
@@ -382,17 +381,14 @@ protected function describeCallable($callable, array $options = array())
382381
/**
383382
* @param array $array
384383
*/
385-
private function renderEventListenerTable(array $eventListeners, SymfonyStyle $renderer)
384+
private function renderEventListenerTable(EventDispatcherInterface $eventDispatcher, $event, array $eventListeners, SymfonyStyle $renderer)
386385
{
387386
$tableHeaders = array('Order', 'Callable', 'Priority');
388387
$tableRows = array();
389388

390-
krsort($eventListeners);
391389
$order = 1;
392-
foreach ($eventListeners as $priority => $listeners) {
393-
foreach ($listeners as $listener) {
394-
$tableRows[] = array(sprintf('#%d', $order++), $this->formatCallable($listener), $priority);
395-
}
390+
foreach ($eventListeners as $order => $listener) {
391+
$tableRows[] = array(sprintf('#%d', $order + 1), $this->formatCallable($listener), $eventDispatcher->getListenerPriority($event, $listener));
396392
}
397393

398394
$renderer->table($tableHeaders, $tableRows);

Console/Descriptor/XmlDescriptor.php

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -449,17 +449,17 @@ private function getEventDispatcherListenersDocument(EventDispatcherInterface $e
449449
$dom = new \DOMDocument('1.0', 'UTF-8');
450450
$dom->appendChild($eventDispatcherXML = $dom->createElement('event-dispatcher'));
451451

452-
$registeredListeners = $eventDispatcher->getListeners($event, true);
452+
$registeredListeners = $eventDispatcher->getListeners($event);
453453
if (null !== $event) {
454-
$this->appendEventListenerDocument($eventDispatcherXML, $registeredListeners);
454+
$this->appendEventListenerDocument($eventDispatcher, $event, $eventDispatcherXML, $registeredListeners);
455455
} else {
456456
ksort($registeredListeners);
457457

458458
foreach ($registeredListeners as $eventListened => $eventListeners) {
459459
$eventDispatcherXML->appendChild($eventXML = $dom->createElement('event'));
460460
$eventXML->setAttribute('name', $eventListened);
461461

462-
$this->appendEventListenerDocument($eventXML, $eventListeners);
462+
$this->appendEventListenerDocument($eventDispatcher, $eventListened, $eventXML, $eventListeners);
463463
}
464464
}
465465

@@ -470,16 +470,13 @@ private function getEventDispatcherListenersDocument(EventDispatcherInterface $e
470470
* @param \DOMElement $element
471471
* @param array $eventListeners
472472
*/
473-
private function appendEventListenerDocument(\DOMElement $element, array $eventListeners)
473+
private function appendEventListenerDocument(EventDispatcherInterface $eventDispatcher, $event, \DOMElement $element, array $eventListeners)
474474
{
475-
krsort($eventListeners);
476-
foreach ($eventListeners as $priority => $listeners) {
477-
foreach ($listeners as $listener) {
478-
$callableXML = $this->getCallableDocument($listener);
479-
$callableXML->childNodes->item(0)->setAttribute('priority', $priority);
475+
foreach ($eventListeners as $listener) {
476+
$callableXML = $this->getCallableDocument($listener);
477+
$callableXML->childNodes->item(0)->setAttribute('priority', $eventDispatcher->getListenerPriority($event, $listener));
480478

481-
$element->appendChild($element->ownerDocument->importNode($callableXML->childNodes->item(0), true));
482-
}
479+
$element->appendChild($element->ownerDocument->importNode($callableXML->childNodes->item(0), true));
483480
}
484481
}
485482

0 commit comments

Comments
 (0)