class YamlRouteDiscovery

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

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

Hierarchy

Expanded class hierarchy of YamlRouteDiscovery

1 file declares its use of YamlRouteDiscovery
RouteBuilderTest.php in core/tests/Drupal/Tests/Core/Routing/RouteBuilderTest.php
1 string reference to 'YamlRouteDiscovery'
core.services.yml in core/core.services.yml
core/core.services.yml
1 service uses YamlRouteDiscovery
router.builder.yaml in core/core.services.yml
Drupal\Core\Routing\YamlRouteDiscovery

File

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

Namespace

Drupal\Core\Routing
View source
class YamlRouteDiscovery extends StaticRouteDiscoveryBase {
  public function __construct(protected readonly ModuleHandlerInterface $moduleHandler, protected readonly ControllerResolverInterface $controllerResolver) {
  }
  
  /**
   * {@inheritdoc}
   */
  protected static function getPriority() : int {
    // Runs before PHP Attribute discovery.
    return 100;
  }
  
  /**
   * {@inheritdoc}
   */
  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;
    }
  }
  
  /**
   * Retrieves all defined routes from .routing.yml files.
   *
   * @return array
   *   The defined routes, keyed by provider.
   */
  protected function getRouteDefinitions() {
    // Always instantiate a new YamlDiscovery object so that we always search on
    // the up-to-date list of modules.
    $discovery = new YamlDiscovery('routing', $this->moduleHandler
      ->getModuleDirectories());
    return $discovery->findAll();
  }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
StaticRouteDiscoveryBase::createRoute protected function Creates a route.
StaticRouteDiscoveryBase::getSubscribedEvents public static function
StaticRouteDiscoveryBase::onRouteBuild public function Adds routes to the route builder.
StaticRouteDiscoveryBase::resetGlobals protected function Gets an array of default values for a route.
YamlRouteDiscovery::collectRoutes protected function Creates a collection of routes to add to the route builder. Overrides StaticRouteDiscoveryBase::collectRoutes
YamlRouteDiscovery::getPriority protected static function Determines the priority of the route build event listener. Overrides StaticRouteDiscoveryBase::getPriority
YamlRouteDiscovery::getRouteDefinitions protected function Retrieves all defined routes from .routing.yml files. 1
YamlRouteDiscovery::__construct public function

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