public function RouteBuilder::rebuild

Rebuilds the route info and dumps to dumper.

File

drupal/core/lib/Drupal/Core/Routing/RouteBuilder.php, line 66
Definition of Drupal\Core\Routing\RouteBuilder.

Class

RouteBuilder
Managing class for rebuilding the router table.

Namespace

Drupal\Core\Routing

Code

public function rebuild() {
  if (!$this->lock
    ->acquire('router_rebuild')) {

    // Wait for another request that is already doing this work.
    // We choose to block here since otherwise the routes might not be
    // available, resulting in a 404.
    $this->lock
      ->wait('router_rebuild');
    return;
  }
  $parser = new Parser();

  // We need to manually call each module so that we can know which module
  // a given item came from.
  // @todo Use an injected Extension service rather than module_list():
  //   http://drupal.org/node/1331486.
  foreach (module_list() as $module) {
    $collection = new RouteCollection();
    $routing_file = DRUPAL_ROOT . '/' . drupal_get_path('module', $module) . '/' . $module . '.routing.yml';
    if (file_exists($routing_file)) {
      $routes = $parser
        ->parse(file_get_contents($routing_file));
      if (!empty($routes)) {
        foreach ($routes as $name => $route_info) {
          $defaults = isset($route_info['defaults']) ? $route_info['defaults'] : array();
          $requirements = isset($route_info['requirements']) ? $route_info['requirements'] : array();
          $route = new Route($route_info['pattern'], $defaults, $requirements);
          $collection
            ->add($name, $route);
        }
      }
    }
    $this->dispatcher
      ->dispatch(RoutingEvents::ALTER, new RouteBuildEvent($collection, $module));
    $this->dumper
      ->addRoutes($collection);
    $this->dumper
      ->dump(array(
      'route_set' => $module,
    ));
  }

  // Now allow modules to register additional, dynamic routes.
  $collection = new RouteCollection();
  $this->dispatcher
    ->dispatch(RoutingEvents::DYNAMIC, new RouteBuildEvent($collection, 'dynamic_routes'));
  $this->dispatcher
    ->dispatch(RoutingEvents::ALTER, new RouteBuildEvent($collection, 'dynamic_routes'));
  $this->dumper
    ->addRoutes($collection);
  $this->dumper
    ->dump(array(
    'route_set' => 'dynamic_routes',
  ));
  $this->lock
    ->release('router_rebuild');
}