Skip to content

Commit 952929c

Browse files
committed
[FrameworkBundle][EventDispatcher] Add priorities to the debug:event-dispatcher command
1 parent 1973960 commit 952929c

17 files changed

+125
-80
lines changed

src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -288,17 +288,27 @@ private function getEventDispatcherListenersData(EventDispatcherInterface $event
288288
{
289289
$data = array();
290290

291-
$registeredListeners = $eventDispatcher->getListeners($event);
291+
$registeredListeners = $eventDispatcher->getListeners($event, true);
292292
if (null !== $event) {
293-
foreach ($registeredListeners as $listener) {
294-
$data[] = $this->getCallableData($listener);
293+
krsort($registeredListeners);
294+
foreach ($registeredListeners as $priority => $listeners) {
295+
foreach ($listeners as $listener) {
296+
$listener = $this->getCallableData($listener);
297+
$listener['priority'] = $priority;
298+
$data[] = $listener;
299+
}
295300
}
296301
} else {
297302
ksort($registeredListeners);
298303

299304
foreach ($registeredListeners as $eventListened => $eventListeners) {
300-
foreach ($eventListeners as $eventListener) {
301-
$data[$eventListened][] = $this->getCallableData($eventListener);
305+
krsort($eventListeners);
306+
foreach ($eventListeners as $priority => $listeners) {
307+
foreach ($listeners as $listener) {
308+
$listener = $this->getCallableData($listener);
309+
$listener['priority'] = $priority;
310+
$data[$eventListened][] = $listener;
311+
}
302312
}
303313
}
304314
}

src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/MarkdownDescriptor.php

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -269,21 +269,30 @@ protected function describeEventDispatcherListeners(EventDispatcherInterface $ev
269269

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

272-
$registeredListeners = $eventDispatcher->getListeners($event);
272+
$registeredListeners = $eventDispatcher->getListeners($event, true);
273273
if (null !== $event) {
274-
foreach ($registeredListeners as $order => $listener) {
275-
$this->write("\n".sprintf('## Listener %d', $order + 1)."\n");
276-
$this->describeCallable($listener);
274+
krsort($registeredListeners);
275+
$order = 1;
276+
foreach ($registeredListeners as $priority => $listeners) {
277+
foreach ($listeners as $listener) {
278+
$this->write("\n".sprintf('## Listener %d', $order++)."\n");
279+
$this->describeCallable($listener);
280+
$this->write(sprintf('- Priority: `%d`', $priority)."\n");
281+
}
277282
}
278283
} else {
279284
ksort($registeredListeners);
280285

281286
foreach ($registeredListeners as $eventListened => $eventListeners) {
282287
$this->write("\n".sprintf('## %s', $eventListened)."\n");
283-
284-
foreach ($eventListeners as $order => $eventListener) {
285-
$this->write("\n".sprintf('### Listener %d', $order + 1)."\n");
286-
$this->describeCallable($eventListener);
288+
krsort($eventListeners);
289+
$order = 1;
290+
foreach ($eventListeners as $priority => $listeners) {
291+
foreach ($listeners as $listener) {
292+
$this->write("\n".sprintf('### Listener %d', $order++)."\n");
293+
$this->describeCallable($listener);
294+
$this->write(sprintf('- Priority: `%d`', $priority)."\n");
295+
}
287296
}
288297
}
289298
}

src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -336,33 +336,16 @@ protected function describeEventDispatcherListeners(EventDispatcherInterface $ev
336336

337337
$this->writeText($this->formatSection('event_dispatcher', $label)."\n", $options);
338338

339-
$registeredListeners = $eventDispatcher->getListeners($event);
339+
$registeredListeners = $eventDispatcher->getListeners($event, true);
340340

341341
if (null !== $event) {
342342
$this->writeText("\n");
343-
$table = new Table($this->getOutput());
344-
$table->getStyle()->setCellHeaderFormat('%s');
345-
$table->setHeaders(array('Order', 'Callable'));
346-
347-
foreach ($registeredListeners as $order => $listener) {
348-
$table->addRow(array(sprintf('#%d', $order + 1), $this->formatCallable($listener)));
349-
}
350-
351-
$table->render();
343+
$this->renderEventListenerTable($registeredListeners);
352344
} else {
353345
ksort($registeredListeners);
354346
foreach ($registeredListeners as $eventListened => $eventListeners) {
355347
$this->writeText(sprintf("\n<info>[Event]</info> %s\n", $eventListened), $options);
356-
357-
$table = new Table($this->getOutput());
358-
$table->getStyle()->setCellHeaderFormat('%s');
359-
$table->setHeaders(array('Order', 'Callable'));
360-
361-
foreach ($eventListeners as $order => $eventListener) {
362-
$table->addRow(array(sprintf('#%d', $order + 1), $this->formatCallable($eventListener)));
363-
}
364-
365-
$table->render();
348+
$this->renderEventListenerTable($eventListeners);
366349
}
367350
}
368351
}
@@ -375,6 +358,26 @@ protected function describeCallable($callable, array $options = array())
375358
$this->writeText($this->formatCallable($callable), $options);
376359
}
377360

361+
/**
362+
* @param array $array
363+
*/
364+
private function renderEventListenerTable(array $eventListeners)
365+
{
366+
$table = new Table($this->getOutput());
367+
$table->getStyle()->setCellHeaderFormat('%s');
368+
$table->setHeaders(array('Order', 'Callable', 'Priority'));
369+
370+
krsort($eventListeners);
371+
$order = 1;
372+
foreach ($eventListeners as $priority => $listeners) {
373+
foreach ($listeners as $listener) {
374+
$table->addRow(array(sprintf('#%d', $order++), $this->formatCallable($listener), $priority));
375+
}
376+
}
377+
378+
$table->render();
379+
}
380+
378381
/**
379382
* @param array $array
380383
*

src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/XmlDescriptor.php

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -446,31 +446,40 @@ private function getEventDispatcherListenersDocument(EventDispatcherInterface $e
446446
$dom = new \DOMDocument('1.0', 'UTF-8');
447447
$dom->appendChild($eventDispatcherXML = $dom->createElement('event-dispatcher'));
448448

449-
$registeredListeners = $eventDispatcher->getListeners($event);
449+
$registeredListeners = $eventDispatcher->getListeners($event, true);
450450
if (null !== $event) {
451-
foreach ($registeredListeners as $listener) {
452-
$callableXML = $this->getCallableDocument($listener);
453-
454-
$eventDispatcherXML->appendChild($eventDispatcherXML->ownerDocument->importNode($callableXML->childNodes->item(0), true));
455-
}
451+
$this->appendEventListenerDocument($eventDispatcherXML, $registeredListeners);
456452
} else {
457453
ksort($registeredListeners);
458454

459455
foreach ($registeredListeners as $eventListened => $eventListeners) {
460456
$eventDispatcherXML->appendChild($eventXML = $dom->createElement('event'));
461457
$eventXML->setAttribute('name', $eventListened);
462458

463-
foreach ($eventListeners as $eventListener) {
464-
$callableXML = $this->getCallableDocument($eventListener);
465-
466-
$eventXML->appendChild($eventXML->ownerDocument->importNode($callableXML->childNodes->item(0), true));
467-
}
459+
$this->appendEventListenerDocument($eventXML, $eventListeners);
468460
}
469461
}
470462

471463
return $dom;
472464
}
473465

466+
/**
467+
* @param DOMElement $element
468+
* @param array $eventListeners
469+
*/
470+
private function appendEventListenerDocument(\DOMElement $element, array $eventListeners)
471+
{
472+
krsort($eventListeners);
473+
foreach ($eventListeners as $priority => $listeners) {
474+
foreach ($listeners as $listener) {
475+
$callableXML = $this->getCallableDocument($listener);
476+
$callableXML->childNodes->item(0)->setAttribute('priority', $priority);
477+
478+
$element->appendChild($element->ownerDocument->importNode($callableXML->childNodes->item(0), true));
479+
}
480+
}
481+
}
482+
474483
/**
475484
* @param callable $callable
476485
*

src/Symfony/Bundle/FrameworkBundle/Tests/Console/Descriptor/ObjectsProvider.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,8 @@ public static function getEventDispatchers()
157157
{
158158
$eventDispatcher = new EventDispatcher();
159159

160-
$eventDispatcher->addListener('event1', 'global_function');
161-
$eventDispatcher->addListener('event1', function () { return 'Closure'; });
160+
$eventDispatcher->addListener('event1', 'global_function', 255);
161+
$eventDispatcher->addListener('event1', function () { return 'Closure'; }, -1);
162162
$eventDispatcher->addListener('event2', new CallableClass());
163163

164164
return array('event_dispatcher_1' => $eventDispatcher);
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
[
22
{
33
"type": "function",
4-
"name": "global_function"
4+
"name": "global_function",
5+
"priority": 255
56
},
67
{
7-
"type": "closure"
8+
"type": "closure",
9+
"priority": -1
810
}
911
]

src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/event_dispatcher_1_event1.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
- Type: `function`
66
- Name: `global_function`
7+
- Priority: `255`
78

89
## Listener 2
910

1011
- Type: `closure`
12+
- Priority: `-1`
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<info>[event_dispatcher]</info> Registered listeners for event <info>event1</info>
22

3-
+-------+-------------------+
4-
| Order | Callable |
5-
+-------+-------------------+
6-
| #1 | global_function() |
7-
| #2 | \Closure() |
8-
+-------+-------------------+
3+
+-------+-------------------+----------+
4+
| Order | Callable | Priority |
5+
+-------+-------------------+----------+
6+
| #1 | global_function() | 255 |
7+
| #2 | \Closure() | -1 |
8+
+-------+-------------------+----------+
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<event-dispatcher>
3-
<callable type="function" name="global_function"/>
4-
<callable type="closure"/>
3+
<callable type="function" name="global_function" priority="255"/>
4+
<callable type="closure" priority="-1"/>
55
</event-dispatcher>

src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/event_dispatcher_1_events.json

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,19 @@
22
"event1": [
33
{
44
"type": "function",
5-
"name": "global_function"
5+
"name": "global_function",
6+
"priority": 255
67
},
78
{
8-
"type": "closure"
9+
"type": "closure",
10+
"priority": -1
911
}
1012
],
1113
"event2": [
1214
{
1315
"type": "object",
14-
"name": "Symfony\\Bundle\\FrameworkBundle\\Tests\\Console\\Descriptor\\CallableClass"
16+
"name": "Symfony\\Bundle\\FrameworkBundle\\Tests\\Console\\Descriptor\\CallableClass",
17+
"priority": 0
1518
}
1619
]
1720
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy