function YamlRouteDiscovery::collectRoutes

Same name and namespace in other branches
  1. main core/lib/Drupal/Core/Routing/YamlRouteDiscovery.php \Drupal\Core\Routing\YamlRouteDiscovery::collectRoutes()

Creates a collection of routes to add to the route builder.

Return value

iterable<int, \Symfony\Component\Routing\RouteCollection> The routes.

Overrides StaticRouteDiscoveryBase::collectRoutes

File

core/lib/Drupal/Core/Routing/YamlRouteDiscovery.php, line 34

Class

YamlRouteDiscovery
Reads routing.yml files provided by modules and creates route collections.

Namespace

Drupal\Core\Routing

Code

protected function collectRoutes() : iterable {
  foreach ($this->getRouteDefinitions() as $routes) {
    $collection = new RouteCollection();
    // 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
    // in an associative array keyed by the route name, which will be iterated
    // over and added to the collection for this provider, or as a new
    // \Symfony\Component\Routing\RouteCollection object, which will be added
    // to the collection.
    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 a RouteCollection is returned, add the whole collection.
          if ($callback_routes instanceof RouteCollection) {
            yield $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) {
      if (isset($route_info['alias'])) {
        $alias = $collection->addAlias($name, $route_info['alias']);
        $deprecation = $route_info['deprecated'] ?? NULL;
        if (isset($deprecation)) {
          $alias->setDeprecated($deprecation['package'], $deprecation['version'], $deprecation['message'] ?? '');
        }
        continue;
      }
      $route_info += $this->resetGlobals();
      $route = $this->createRoute($route_info['path'], $route_info['defaults'], $route_info['requirements'], $route_info['options'], $route_info['host'], $route_info['schemes'], $route_info['methods'], $route_info['condition'] ?? NULL);
      $collection->add($name, $route);
    }
    yield $collection;
  }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.