Rebuilds the route info and dumps to dumper.
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');
}