function AttributeRouteDiscovery::collectRoutes
Same name and namespace in other branches
- 11.x core/lib/Drupal/Core/Routing/AttributeRouteDiscovery.php \Drupal\Core\Routing\AttributeRouteDiscovery::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/ AttributeRouteDiscovery.php, line 40
Class
- AttributeRouteDiscovery
- Discovers routes using Symfony's Route attribute.
Namespace
Drupal\Core\RoutingCode
protected function collectRoutes() : iterable {
$routeTypes = [
'Controller' => $this->createControllerRouteCollection(...),
'Form' => $this->createFormRouteCollection(...),
];
foreach ($this->namespaces as $namespace => $directories) {
foreach ((array) $directories as $directory) {
foreach ($routeTypes as $routeType => $factory) {
$routeDirectory = $directory . '/' . $routeType;
$routeNamespace = $namespace . '\\' . $routeType;
if (is_dir($routeDirectory)) {
$iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($routeDirectory, \RecursiveDirectoryIterator::SKIP_DOTS));
foreach ($iterator as $fileinfo) {
if ($fileinfo->getExtension() == 'php') {
// Skip files that do not contain a Route attribute.
$contents = file_get_contents($fileinfo->getPathname());
if (!str_contains($contents, '#[Route') && !str_contains($contents, 'Routing\\Attribute\\Route')) {
continue;
}
$subPath = $iterator->getSubIterator()
->getSubPath();
$subPath = $subPath ? str_replace(DIRECTORY_SEPARATOR, '\\', $subPath) . '\\' : '';
$class = $routeNamespace . '\\' . $subPath . $fileinfo->getBasename('.php');
$reflectionClass = $this->getReflectionClass($class);
if ($reflectionClass !== NULL) {
yield $factory($reflectionClass);
}
}
}
}
}
}
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.