8000 Merge branch '2.8' · symfony/symfony@133bd0a · GitHub
[go: up one dir, main page]

Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 133bd0a

Browse files
committed
Merge branch '2.8'
* 2.8: [Yaml] deprecated non-escaped \ in double-quoted strings when parsing removed wrong dep [EventDispatcher] added EventDispatcher::getListenerPriority()
2 parents 5b67819 + 77f5141 commit 133bd0a

14 files changed

+167
-121
lines changed

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

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

272-
$registeredListeners = $eventDispatcher->getListeners($event, true);
272+
$registeredListeners = $eventDispatcher->getListeners($event);
273273
if (null !== $event) {
274-
krsort($registeredListeners);
275-
foreach ($registeredListeners as $priority => $listeners) {
276-
foreach ($listeners as $listener) {
277-
$listener = $this->getCallableData($listener);
278-
$listener['priority'] = $priority;
279-
$data[] = $listener;
280-
}
274+
foreach ($registeredListeners as $listener) {
275+
$l = $this->getCallableData($listener);
276+
$l['priority'] = $eventDispatcher->getListenerPriority($event, $listener);
277+
$data[] = $l;
281278
}
282279
} else {
283280
ksort($registeredListeners);
284281

285282
foreach ($registeredListeners as $eventListened => $eventListeners) {
286-
krsort($eventListeners);
287-
foreach ($eventListeners as $priority => $listeners) {
288-
foreach ($listeners as $listener) {
289-
$listener = $this->getCallableData($listener);
290-
$listener['priority'] = $priority;
291-
$data[$eventListened][] = $listener;
292-
}
283+
foreach ($eventListeners as $eventListener) {
284+
$l = $this->getCallableData($eventListener);
285+
$l['priority'] = $eventDispatcher->getListenerPriority($eventListened, $eventListener);
286+
$data[$eventListened][] = $l;
293287
}
294288
}
295289
}

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

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

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

256-
$registeredListeners = $eventDispatcher->getListeners($event, true);
256+
$registeredListeners = $eventDispatcher->getListeners($event);
257257
if (null !== $event) {
258-
krsort($registeredListeners);
259-
$order = 1;
260-
foreach ($registeredListeners as $priority => $listeners) {
261-
foreach ($listeners as $listener) {
262-
$this->write("\n".sprintf('## Listener %d', $order++)."\n");
263-
$this->describeCallable($listener);
264-
$this->write(sprintf('- Priority: `%d`', $priority)."\n");
265-
}
258+
foreach ($registeredListeners as $order => $listener) {
259+
$this->write("\n".sprintf('## Listener %d', $order + 1)."\n");
260+
$this->describeCallable($listener);
261+
$this->write(sprintf('- Priority: `%d`', $eventDispatcher->getListenerPriority($event, $listener))."\n");
266262
}
267263
} else {
268264
ksort($registeredListeners);
269265

270266
foreach ($registeredListeners as $eventListened => $eventListeners) {
271267
$this->write("\n".sprintf('## %s', $eventListened)."\n");
272-
krsort($eventListeners);
273-
$order = 1;
274-
foreach ($eventListeners as $priority => $listeners) {
275-
foreach ($listeners as $listener) {
276-
$this->write("\n".sprintf('### Listener %d', $order++)."\n");
277-
$this->describeCallable($listener);
278-
$this->write(sprintf('- Priority: `%d`', $priority)."\n");
279-
}
268+
269+
foreach ($eventListeners as $order => $eventListener) {
270+
$this->write("\n".sprintf('### Listener %d', $order + 1)."\n");
271+
$this->describeCallable($eventListener);
272+
$this->write(sprintf('- Priority: `%d`', $eventDispatcher->getListenerPriority($eventListened, $eventListener))."\n");
280273
}
281274
}
282275
}

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

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

342342
$options['output']->title($title);
343343

344-
$registeredListeners = $eventDispatcher->getListeners($event, true);
345-
344+
$registeredListeners = $eventDispatcher->getListeners($event);
346345
if (null !== $event) {
347-
$this->renderEventListenerTable($registeredListeners, $options['output']);
346+
$this->renderEventListenerTable($eventDispatcher, $event, $registeredListeners, $options['output']);
348347
} else {
349348
ksort($registeredListeners);
350349
foreach ($registeredListeners as $eventListened => $eventListeners) {
351350
$options['output']->section(sprintf('"%s" event', $eventListened));
352-
$this->renderEventListenerTable($eventListeners, $options['output']);
351+
$this->renderEventListenerTable($eventDispatcher, $eventListened, $eventListeners, $options['output']);
353352
}
354353
}
355354
}
@@ -365,17 +364,14 @@ protected function describeCallable($callable, array $options = array())
365364
/**
366365
* @param array $array
367366
*/
368-
private function renderEventListenerTable(array $eventListeners, SymfonyStyle $renderer)
367+
private function renderEventListenerTable(EventDispatcherInterface $eventDispatcher, $event, array $eventListeners, SymfonyStyle $renderer)
369368
{
370369
$tableHeaders = array('Order', 'Callable', 'Priority');
371370
$tableRows = array();
372371

373-
krsort($eventListeners);
374372
$order = 1;
375-
foreach ($eventListeners as $priority => $listeners) {
376-
foreach ($listeners as $listener) {
377-
$tableRows[] = array(sprintf('#%d', $order++), $this->formatCallable($listener), $priority);
378-
}
373+
foreach ($eventListeners as $order => $listener) {
374+
$tableRows[] = array(sprintf('#%d', $order + 1), $this->formatCallable($listener), $eventDispatcher->getListenerPriority($event, $listener));
379375
}
380376

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

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

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

432-
$registeredListeners = $eventDispatcher->getListeners($event, true);
432+
$registeredListeners = $eventDispatcher->getListeners($event);
433433
if (null !== $event) {
434-
$this->appendEventListenerDocument($eventDispatcherXML, $registeredListeners);
434+
$this->appendEventListenerDocument($eventDispatcher, $event, $eventDispatcherXML, $registeredListeners);
435435
} else {
436436
ksort($registeredListeners);
437437

438438
foreach ($registeredListeners as $eventListened => $eventListeners) {
439439
$eventDispatcherXML->appendChild($eventXML = $dom->createElement('event'));
440440
$eventXML->setAttribute('name', $eventListened);
441441

442-
$this->appendEventListenerDocument($eventXML, $eventListeners);
442+
$this->appendEventListenerDocument($eventDispatcher, $eventListened, $eventXML, $eventListeners);
443443
}
444444
}
445445

@@ -450,16 +450,13 @@ private function getEventDispatcherListenersDocument(EventDispatcherInterface $e
450450
* @param \DOMElement $element
451451
* @param array $eventListeners
452452
*/
453-
private function appendEventListenerDocument(\DOMElement $element, array $eventListeners)
453+
private function appendEventListenerDocument(EventDispatcherInterface $eventDispatcher, $event, \DOMElement $element, array $eventListeners)
454454
{
455-
krsort($eventListeners);
456-
foreach ($eventListeners as $priority => $listeners) {
457-
foreach ($listeners as $listener) {
458-
$callableXML = $this->getCallableDocument($listener);
459-
$callableXML->childNodes->item(0)->setAttribute('priority', $priority);
455+
foreach ($eventListeners as $listener) {
456+
$callableXML = $this->getCallableDocument($listener);
457+
$callableXML->childNodes->item(0)->setAttribute('priority', $eventDispatcher->getListenerPriority($event, $listener));
460458

461-
$element->appendChild($element->ownerDocument->importNode($callableXML->childNodes->item(0), true));
462-
}
459+
$element->appendChild($element->ownerDocument->importNode($callableXML->childNodes->item(0), true));
463460
}
464461
}
465462

src/Symfony/Component/EventDispatcher/ContainerAwareEventDispatcher.php

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public function hasListeners($eventName = null)
117117
/**
118118
* {@inheritdoc}
119119
*/
120-
public function getListeners($eventName = null, $withPriorities = false)
120+
public function getListeners($eventName = null)
121121
{
122122
if (null === $eventName) {
123123
foreach ($this->listenerIds as $serviceEventName => $args) {
@@ -127,7 +127,17 @@ public function getListeners($eventName = null, $withPriorities = false)
127127
$this->lazyLoad($eventName);
128128
}
129129

130-
return parent::getListeners($eventName, $withPriorities);
130+
return parent::getListeners($eventName);
131+
}
132+
133+
/**
134+
* {@inheritdoc}
135+
*/
136+
public function getListenerPriority($eventName, $listener)
137+
{
138+
$this->lazyLoad($eventName);
139+
140+
return parent::getListenerPriority($eventName, $listener);
131141
}
132142

133143
/**

src/Symfony/Component/EventDispatcher/Debug/TraceableEventDispatcher.php

Lines changed: 27 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,17 @@ public function removeSubscriber(EventSubscriberInterface $subscriber)
9494
/**
9595
* {@inheritdoc}
9696
*/
97-
public function getListeners($eventName = null, $withPriorities = false)
97+
public function getListeners($eventName = null)
9898
{
99-
return $this->dispatcher->getListeners($eventName, $withPriorities);
99+
return $this->dispatcher->getListeners($eventName);
100+
}
101+
102+
/**
103+
* {@inheritdoc}
104+
*/
105+
public function getListenerPriority($eventName, $listener)
106+
{
107+
return $this->dispatcher->getListenerPriority($eventName, $listener);
100108
}
101109

102110
/**
@@ -141,8 +149,7 @@ public function getCalledListeners()
141149
$called = array();
142150
foreach ($this->called as $eventName => $listeners) {
143151
foreach ($listeners as $listener) {
144-
$priority = $this->getListenerPriority($eventName, $listener);
145-
$info = $this->getListenerInfo($listener->getWrappedListener(), $eventName, $priority);
152+
$info = $this->getListenerInfo($listener->getWrappedListener(), $eventName);
146153
$called[$eventName.'.'.$info['pretty']] = $info;
147154
}
148155
}
@@ -156,7 +163,7 @@ public function getCalledListeners()
156163
public function getNotCalledListeners()
157164
{
158165
try {
159-
$allListeners = $this->getListeners(null, true);
166+
$allListeners = $this->getListeners();
160167
} catch (\Exception $e) {
161168
if (null !== $this->logger) {
162169
$this->logger->info('An exception was thrown while getting the uncalled listeners.', array('exception' => $e));
@@ -167,24 +174,22 @@ public function getNotCalledListeners()
167174
}
168175

169176
$notCalled = array();
170-
foreach ($allListeners as $eventName => $priorities) {
171-
foreach ($priorities as $priority => $listeners) {
172-
foreach ($listeners as $listener) {
173-
$called = false;
174-
if (isset($this->called[$eventName])) {
175-
foreach ($this->called[$eventName] as $l) {
176-
if ($l->getWrappedListener() === $listener) {
177-
$called = true;
178-
179-
break;
180-
}
177+
foreach ($allListeners as $eventName => $listeners) {
178+
foreach ($listeners as $listener) {
179+
$called = false;
180+
if (isset($this->called[$eventName])) {
181+
foreach ($this->called[$eventName] as $l) {
182+
if ($l->getWrappedListener() === $listener) {
183+
$called = true;
184+
185+
break;
181186
}
182187
}
188+
}
183189

184-
if (!$called) {
185-
F438 $info = $this->getListenerInfo($listener, $eventName, $priority);
186-
$notCalled[$eventName.'.'.$info['pretty']] = $info;
187-
}
190+
if (!$called) {
191+
$info = $this->getListenerInfo($listener, $eventName);
192+
$notCalled[$eventName.'.'.$info['pretty']] = $info;
188193
}
189194
}
190195
}
@@ -286,11 +291,11 @@ private function postProcess($eventName)
286291
*
287292
* @return array Information about the listener
288293
*/
289-
private function getListenerInfo($listener, $eventName, $priority = null)
294+
private function getListenerInfo($listener, $eventName)
290295
{
291296
$info = array(
292297
'event' => $eventName,
293-
'priority' => $priority,
298+
'priority' => $this->getListenerPriority($eventName, $listener),
294299
);
295300
if ($listener instanceof \Closure) {
296301
$info += array(
@@ -339,28 +344,6 @@ private function getListenerInfo($listener, $eventName, $priority = null)
339344
return $info;
340345
}
341346

342-
private function getListenerPriority($eventName, $listenerConfig)
343-
{
344-
try {
345-
$allListeners = $this->getListeners(null, true);
346-
} catch (\Exception $e) {
347-
if (null !== $this->logger) {
348-
$this->logger->info('An exception was thrown while getting the listeners.', array('exception' => $e));
349-
}
350-
351-
return;
352-
}
353-
354-
$listenerWrapper = $listenerConfig->getWrappedListener();
355-
foreach ($allListeners[$eventName] as $priority => $listeners) {
356-
foreach ($listeners as $listener) {
357-
if (is_array($listenerWrapper) && $listenerWrapper[0] === $listener[0]) {
358-
return $priority;
359-
}
360-
}
361-
}
362-
}
363-
364347
private function sortListenersByPriority($a, $b)
365348
{
366349
if (is_int($a['priority']) && !is_int($b['priority'])) {

src/Symfony/Component/EventDispatcher/EventDispatcher.php

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,8 @@ public function dispatch($eventName, Event $event = null)
4949
/**
5050
* {@inheritdoc}
5151
*/
52-
public function getListeners($eventName = null, $withPriorities = false)
52+
public function getListeners($eventName = null)
5353
{
54-
if (true === $withPriorities) {
55-
if (null !== $eventName) {
56-
return isset($this->listeners[$eventName]) ? $this->listeners[$eventName] : array();
57-
}
58-
59-
return array_filter($this->listeners);
60-
}
61-
6254
if (null !== $eventName) {
6355
if (!isset($this->listeners[$eventName])) {
6456
return array();
@@ -80,6 +72,29 @@ public function getListeners($eventName = null, $withPriorities = false)
8072
return array_filter($this->sorted);
8173
}
8274

75+
/**
76+
* Gets the listener priority for a specific event.
77+
*
78+
* Returns null if the event or the listener does not exist.
79+
*
80+
* @param string $eventName The name of the event
81+
* @param callable $listener The listener to remove
82+
*
83+
* @return int|null The event listener priority
84+
*/
85+
public function getListenerPriority($eventName, $listener)
86+
{
87+
if (!isset($this->listeners[$eventName])) {
88+
return;
89+
}
90+
91+
foreach ($this->listeners[$eventName] as $priority => $listeners) {
92+
if (false !== ($key = array_search($listener, $listeners, true))) {
93+
return $priority;
94+
}
95+
}
96+
}
97+
8398
/**
8499
* {@inheritdoc}
85100
*/
@@ -174,8 +189,6 @@ protected function doDispatch($listeners, $eventName, Event $event)
174189
*/
175190
private function sortListeners($eventName)
176191
{
177-
$this->sorted[$eventName] = array();
178-
179192
krsort($this->listeners[$eventName]);
180193
$this->sorted[$eventName] = call_user_func_array('array_merge', $this->listeners[$eventName]);
181194
}

src/Symfony/Component/EventDispatcher/ImmutableEventDispatcher.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,17 @@ public function removeSubscriber(EventSubscriberInterface $subscriber)
7878
/**
7979
* {@inheritdoc}
8080
*/
81-
public function getListeners($eventName = null, $withPriorities = false)
81+
public function getListeners($eventName = null)
8282
{
83-
return $this->dispatcher->getListeners($eventName, $withPriorities);
83+
return $this->dispatcher->getListeners($eventName);
84+
}
85+
86+
/**
87+
* {@inheritdoc}
88+
*/
89+
public function getListenerPriority($eventName, $listener)
90+
{
91+
return $this->dispatcher->getListenerPriority($eventName, $listener);
8492
}
8593

8694
/**

0 commit comments

Comments
 (0)
0