diff --git b/core/lib/Drupal/Core/EventSubscriber/ModuleRouteSubscriber.php a/core/lib/Drupal/Core/EventSubscriber/ModuleRouteSubscriber.php index 1cf7a20..df8a5f7 100644 --- b/core/lib/Drupal/Core/EventSubscriber/ModuleRouteSubscriber.php +++ a/core/lib/Drupal/Core/EventSubscriber/ModuleRouteSubscriber.php @@ -13,7 +13,7 @@ use Drupal\Core\Routing\RoutingEvents; /** - * A route subscriber for altering routes based on module data. + * A route subscriber to remove routes that depend on modules being enabled. */ class ModuleRouteSubscriber implements EventSubscriberInterface { @@ -51,8 +51,13 @@ public static function getSubscribedEvents() { public function removeRoutes(RouteBuildEvent $event) { $collection = $event->getRouteCollection(); foreach ($collection as $name => $route) { - if ($route->hasRequirement('_module_dependency') && !$this->moduleHandler->moduleExists($route->getRequirement('_module_dependency'))) { - $collection->remove($name); + if ($route->hasOption('_module_dependency')) { + foreach ((array) $route->getOption('_module_dependency') as $module) { + if (!$this->moduleHandler->moduleExists($module)) { + $collection->remove($name); + break; + } + } } } } diff --git b/core/modules/dblog/dblog.routing.yml a/core/modules/dblog/dblog.routing.yml index 31f1b1c..ea66200 100644 --- b/core/modules/dblog/dblog.routing.yml +++ a/core/modules/dblog/dblog.routing.yml @@ -27,3 +27,13 @@ dblog.access_denied: _content: '\Drupal\dblog\Controller\DbLogController::accessDenied' requirements: _permission: 'access site reports' + +dblog.search: + path: '/admin/reports/search' + defaults: + _content: '\Drupal\dblog\Controller\DbLogController::search' + _title: 'Top search phrases' + options: + _module_dependency: ['search'] + requirements: + _permission: 'access site reports' diff --git b/core/modules/dblog/dblog.services.yml a/core/modules/dblog/dblog.services.yml deleted file mode 100644 index 815734c..0000000 --- b/core/modules/dblog/dblog.services.yml +++ /dev/null @@ -1,6 +0,0 @@ -services: - dblog.route_subscriber: - class: Drupal\dblog\Routing\RouteSubscriber - arguments: ['@module_handler'] - tags: - - { name: event_subscriber} diff --git b/core/modules/dblog/lib/Drupal/dblog/Routing/RouteSubscriber.php a/core/modules/dblog/lib/Drupal/dblog/Routing/RouteSubscriber.php deleted file mode 100644 index f04492e..0000000 --- b/core/modules/dblog/lib/Drupal/dblog/Routing/RouteSubscriber.php +++ /dev/null @@ -1,73 +0,0 @@ -moduleHandler = $module_handler; - } - - /** - * {@inheritdoc} - */ - public static function getSubscribedEvents() { - $events[RoutingEvents::DYNAMIC] = 'routes'; - return $events; - } - - /** - * Generate dynamic routes for various dblog pages. - * - * @param \Drupal\Core\Routing\RouteBuildEvent $event - * The route building event. - * - * @return \Symfony\Component\Routing\RouteCollection - * The route collection that contains the new dynamic route. - */ - public function routes(RouteBuildEvent $event) { - $collection = $event->getRouteCollection(); - if ($this->moduleHandler->moduleExists('search')) { - // The block entity listing page. - $route = new Route( - 'admin/reports/search', - array( - '_content' => '\Drupal\dblog\Controller\DbLogController::search', - '_title' => 'Top search phrases', - ), - array( - '_permission' => 'access site reports', - ) - ); - $collection->add('dblog.search', $route); - } - } - -} diff --git b/core/tests/Drupal/Tests/Core/EventSubscriber/ModuleRouteSubscriberTest.php a/core/tests/Drupal/Tests/Core/EventSubscriber/ModuleRouteSubscriberTest.php index 20f476c..957bd1e 100644 --- b/core/tests/Drupal/Tests/Core/EventSubscriber/ModuleRouteSubscriberTest.php +++ a/core/tests/Drupal/Tests/Core/EventSubscriber/ModuleRouteSubscriberTest.php @@ -40,18 +40,21 @@ public static function getInfo() { */ public function testRemoveRoute() { $module_handler = $this->getMock('Drupal\Core\Extension\ModuleHandlerInterface'); - // Should only get called for 2 of the 3 routes. - $module_handler->expects($this->exactly(2)) + $module_handler->expects($this->any()) ->method('moduleExists') ->will($this->returnCallback(array($this, 'moduleExistsCallback'))); $collection = new RouteCollection(); - $route_1 = new Route('', array(), array('_module_dependency' => 'enabled')); + $route_1 = new Route('', array(), array(), array('_module_dependency' => array('enabled'))); $collection->add('enabled', $route_1); - $route_2 = new Route('module_disabled', array(), array('_module_dependency' => 'disabled')); + $route_2 = new Route('module_disabled', array(), array(), array('_module_dependency' => array('disabled'))); $collection->add('disabled', $route_2); - $route_3 = new Route('no_module_dependency', array(), array()); - $collection->add('no_module_dependency', $route_3); + $route_3 = new Route('module_disabled_first', array(), array(), array('_module_dependency' => array('disabled', 'enabled'))); + $collection->add('disabled_first', $route_3); + $route_4 = new Route('module_disabled_second', array(), array(), array('_module_dependency' => array('enabled', 'disabled'))); + $collection->add('disabled_second', $route_4); + $route_5 = new Route('no_module_dependency', array(), array(), array()); + $collection->add('no_module_dependency', $route_5); $event = new RouteBuildEvent($collection, 'test'); $route_subscriber = new ModuleRouteSubscriber($module_handler); @@ -59,6 +62,8 @@ public function testRemoveRoute() { $this->assertInstanceOf('Symfony\Component\Routing\Route', $collection->get('enabled')); $this->assertNull($collection->get('disabled')); + $this->assertNull($collection->get('disabled_first')); + $this->assertNull($collection->get('disabled_second')); $this->assertInstanceOf('Symfony\Component\Routing\Route', $collection->get('no_module_dependency')); }