diff --git a/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterEventSubscribersPass.php b/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterEventSubscribersPass.php index 2c24e3e1e7..a8619b9173 100644 --- a/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterEventSubscribersPass.php +++ b/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterEventSubscribersPass.php @@ -77,8 +77,8 @@ public function process(ContainerBuilder $container) { } foreach (array_keys($event_subscriber_info) as $event_name) { - krsort($event_subscriber_info[$event_name]); $event_subscriber_info[$event_name] = $this->processSingleEvent($event_subscriber_info[$event_name], $unpriorised_event_subscriber_info[$event_name]); + krsort($event_subscriber_info[$event_name]); } $definition->addArgument($event_subscriber_info); @@ -157,6 +157,9 @@ protected function processSingleEvent(array $event_subscriber_info, array $unpri if ($min === NULL) { $event_priorities[$index][1] = PHP_INT_MIN; } + elseif ($max === NULL) { + $event_priorities[$index][1] = PHP_INT_MAX; + } else { // This is the actual linear interpolation. // A possible $event_priorities can have multiple indexes without diff --git a/core/tests/Drupal/Tests/Core/DependencyInjection/Compiler/RegisterEventSubscribersPassTest.php b/core/tests/Drupal/Tests/Core/DependencyInjection/Compiler/RegisterEventSubscribersPassTest.php index dabc9fa339..6ce59197c4 100644 --- a/core/tests/Drupal/Tests/Core/DependencyInjection/Compiler/RegisterEventSubscribersPassTest.php +++ b/core/tests/Drupal/Tests/Core/DependencyInjection/Compiler/RegisterEventSubscribersPassTest.php @@ -32,18 +32,26 @@ public function testProcess() { PHP_INT_MIN => [ ['service' => ['basic-subscriber', 'onAfterFooAfterBar']], ], + -3074457345618258944 => [ + ['service' => ['basic-subscriber', 'onAfterFoo']], + ], + -6148914691236517888 => [ + ['service' => ['basic-subscriber', 'onAfterBar']], + ], 0 => [ ['service' => ['basic-subscriber', 'onFoo']], ], - 33 => [ - ['service' => ['basic-subscriber', 'onBeforeFoo']], - ], - 66 => [ + 50 => [ ['service' => ['basic-subscriber', 'onBeforeFooAfterBar']], ], 100 => [ ['service' => ['basic-subscriber', 'onBar']], ], + PHP_INT_MAX => [ + ['service' => ['basic-subscriber', 'onBeforeBar']], + ['service' => ['basic-subscriber', 'onBeforeFooBeforeBar']], + ['service' => ['basic-subscriber', 'onBeforeFoo']], + ], ]; $this->assertEquals($expected, $events['myEvent']); } @@ -55,8 +63,13 @@ public static function getSubscribedEvents() { $events['myEvent'][] = ['onFoo']; $events['myEvent'][] = ['onBar', 100]; $events['myEvent'][] = ['onBeforeFoo', [[RegisterEventSubscribersPass::BEFORE, 'basic-subscriber::onFoo']]]; + $events['myEvent'][] = ['onAfterFoo', [[RegisterEventSubscribersPass::AFTER, 'basic-subscriber::onFoo']]]; + $events['myEvent'][] = ['onBeforeBar', [[RegisterEventSubscribersPass::BEFORE, 'basic-subscriber::onBar']]]; + $events['myEvent'][] = ['onAfterBar', [[RegisterEventSubscribersPass::AFTER, 'basic-subscriber::onBar']]]; + $events['myEvent'][] = ['onBeforeFooBeforeBar', [[RegisterEventSubscribersPass::BEFORE, 'basic-subscriber::onFoo'], [RegisterEventSubscribersPass::BEFORE, 'basic-subscriber::onBar']]]; $events['myEvent'][] = ['onBeforeFooAfterBar', [[RegisterEventSubscribersPass::BEFORE, 'basic-subscriber::onFoo'], [RegisterEventSubscribersPass::AFTER, 'basic-subscriber::onBar']]]; $events['myEvent'][] = ['onAfterFooAfterBar', [[RegisterEventSubscribersPass::AFTER, 'basic-subscriber::onFoo'], [RegisterEventSubscribersPass::AFTER, 'basic-subscriber::onBar']]]; + // $events['myEvent'][] = ['onAfterFooBeforeBar', [[RegisterEventSubscribersPass::AFTER, 'basic-subscriber::onFoo'], [RegisterEventSubscribersPass::BEFORE, 'basic-subscriber::onBar']]]; return $events; }