diff --git a/core/lib/Drupal/Core/Extension/ModuleInstaller.php b/core/lib/Drupal/Core/Extension/ModuleInstaller.php index 97a3b70..84aacb5 100644 --- a/core/lib/Drupal/Core/Extension/ModuleInstaller.php +++ b/core/lib/Drupal/Core/Extension/ModuleInstaller.php @@ -295,7 +295,7 @@ public function install(array $module_list, $enable_dependencies = TRUE) { // If any modules were newly installed, invoke hook_modules_installed(). if (!empty($modules_installed)) { - \Drupal::service('router.builder')->rebuild(); + \Drupal::service('router.builder')->setRebuildNeeded(); $this->moduleHandler->invokeAll('modules_installed', array($modules_installed)); } @@ -376,9 +376,6 @@ public function uninstall(array $module_list, $uninstall_dependents = TRUE) { } } - // @todo: make this a method on the RouteBuilder. - \Drupal::service('cache.default')->delete('routebuilder:yml:' . $module); - // Allow modules to react prior to the uninstallation of a module. $this->moduleHandler->invokeAll('module_preuninstall', array($module)); @@ -440,7 +437,7 @@ public function uninstall(array $module_list, $uninstall_dependents = TRUE) { $schema_store = \Drupal::keyValue('system.schema'); $schema_store->delete($module); } - \Drupal::service('router.builder')->rebuild(); + \Drupal::service('router.builder')->setRebuildNeeded(); drupal_get_installed_schema_version(NULL, TRUE); // Let other modules react. diff --git a/core/lib/Drupal/Core/Routing/RouteBuilder.php b/core/lib/Drupal/Core/Routing/RouteBuilder.php index a400927..39203db 100644 --- a/core/lib/Drupal/Core/Routing/RouteBuilder.php +++ b/core/lib/Drupal/Core/Routing/RouteBuilder.php @@ -148,8 +148,10 @@ public function rebuild() { $this->building = TRUE; $collection = new RouteCollection(); - $this->routeCollection = $collection; - foreach ($this->getRouteDefinitions() as $routes) { + + $module_dirs = $this->moduleHandler->getModuleDirectories(); + $this->yamlDiscovery = new YamlDiscovery('routing', $module_dirs); + foreach ($this->yamlDiscovery->findAll() as $routes) { // The top-level 'routes_callback' is a list of methods in controller // syntax, see \Drupal\Core\Controller\ControllerResolver. These methods // should return a set of \Symfony\Component\Routing\Route objects, either @@ -222,46 +224,6 @@ public function rebuildIfNeeded() { } /** - * Retrieves all defined routes from .routing.yml files. - * - * @return array - * The defined routes, keyed by provider. - */ - protected function getRouteDefinitions() { - $route_definitions = []; - $cache_ids = []; - $module_cache_id_map = []; - - $module_dirs = $this->moduleHandler->getModuleDirectories(); - foreach ($module_dirs as $module => $dir) { - $cache_ids[] = 'routebuilder:yml:' . $module; - $module_cache_id_map['routebuilder:yml:' . $module] = $module; - } - foreach ($this->cache->getMultiple($cache_ids) as $cache) { - if ($cache->data) { - $route_definitions[$module_cache_id_map[$cache->cid]] = $cache->data; - } - unset($module_dirs[$module_cache_id_map[$cache->cid]]); - } - if ($module_dirs) { - if (!isset($this->yamlDiscovery)) { - $this->yamlDiscovery = new YamlDiscovery('routing', $module_dirs); - } - foreach ($this->yamlDiscovery->findAll() as $module => $routes) { - $route_definitions[$module] = $routes; - $this->cache->set('routebuilder:yml:' . $module, $routes); - unset($module_dirs[$module]); - } - // Cache the fact that this module has no routing yml to parse. - foreach ($module_dirs as $module) { - $routes = []; - $this->cache->set('routebuilder:yml:' . $module, $routes); - } - } - return $route_definitions; - } - - /** * {@inheritdoc} */ public function destruct() {