public function RouteBuilder::rebuild in Drupal 10
Same name in this branch
- 10 core/lib/Drupal/Core/Routing/RouteBuilder.php \Drupal\Core\Routing\RouteBuilder::rebuild()
- 10 core/lib/Drupal/Core/ProxyClass/Routing/RouteBuilder.php \Drupal\Core\ProxyClass\Routing\RouteBuilder::rebuild()
Same name and namespace in other branches
- 8 core/lib/Drupal/Core/Routing/RouteBuilder.php \Drupal\Core\Routing\RouteBuilder::rebuild()
- 9 core/lib/Drupal/Core/Routing/RouteBuilder.php \Drupal\Core\Routing\RouteBuilder::rebuild()
File
- core/lib/Drupal/Core/Routing/RouteBuilder.php, line 119
Class
- RouteBuilder
- Managing class for rebuilding the router table.
Namespace
Drupal\Core\Routing
Code
public function rebuild() {
if ($this->building) {
throw new \RuntimeException('Recursive router rebuild detected.');
}
if (!$this->lock
->acquire('router_rebuild')) {
$this->lock
->wait('router_rebuild');
return FALSE;
}
$this->building = TRUE;
$collection = new RouteCollection();
foreach ($this
->getRouteDefinitions() as $routes) {
if (isset($routes['route_callbacks'])) {
foreach ($routes['route_callbacks'] as $route_callback) {
$callback = $this->controllerResolver
->getControllerFromDefinition($route_callback);
if ($callback_routes = call_user_func($callback)) {
if ($callback_routes instanceof RouteCollection) {
$collection
->addCollection($callback_routes);
}
else {
foreach ($callback_routes as $name => $callback_route) {
$collection
->add($name, $callback_route);
}
}
}
}
unset($routes['route_callbacks']);
}
foreach ($routes as $name => $route_info) {
$route_info += [
'defaults' => [],
'requirements' => [],
'options' => [],
'host' => NULL,
'schemes' => [],
'methods' => [],
'condition' => '',
];
$route_info['options'] += [
'compiler_class' => RouteCompiler::class,
];
$route = new Route($route_info['path'], $route_info['defaults'], $route_info['requirements'], $route_info['options'], $route_info['host'], $route_info['schemes'], $route_info['methods'], $route_info['condition']);
$collection
->add($name, $route);
}
}
$this->dispatcher
->dispatch(new RouteBuildEvent($collection), RoutingEvents::DYNAMIC);
$this->dispatcher
->dispatch(new RouteBuildEvent($collection), RoutingEvents::ALTER);
$this->checkProvider
->setChecks($collection);
$this->dumper
->addRoutes($collection);
$this->dumper
->dump();
$this->lock
->release('router_rebuild');
$this->dispatcher
->dispatch(new Event(), RoutingEvents::FINISHED);
$this->building = FALSE;
$this->rebuildNeeded = FALSE;
return TRUE;
}