Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. AttributeDirectoryLoader.php

function AttributeDirectoryLoader::load

Throws

\InvalidArgumentException When the directory does not exist or its routes cannot be parsed

Overrides AttributeFileLoader::load

File

vendor/symfony/routing/Loader/AttributeDirectoryLoader.php, line 29

Class

AttributeDirectoryLoader
AttributeDirectoryLoader loads routing information from attributes set on PHP classes and methods.

Namespace

Symfony\Component\Routing\Loader

Code

public function load(mixed $path, ?string $type = null) : ?RouteCollection {
    if (!is_dir($dir = $this->locator
        ->locate($path))) {
        return parent::supports($path, $type) ? parent::load($path, $type) : new RouteCollection();
    }
    $collection = new RouteCollection();
    $collection->addResource(new DirectoryResource($dir, '/\\.php$/'));
    $files = iterator_to_array(new \RecursiveIteratorIterator(new \RecursiveCallbackFilterIterator(new \RecursiveDirectoryIterator($dir, \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::FOLLOW_SYMLINKS), fn(\SplFileInfo $current) => !str_starts_with($current->getBasename(), '.')), \RecursiveIteratorIterator::LEAVES_ONLY));
    usort($files, fn(\SplFileInfo $a, \SplFileInfo $b) => (string) $a > (string) $b ? 1 : -1);
    foreach ($files as $file) {
        if (!$file->isFile() || !str_ends_with($file->getFilename(), '.php')) {
            continue;
        }
        if ($class = $this->findClass($file)) {
            $refl = new \ReflectionClass($class);
            if ($refl->isAbstract()) {
                continue;
            }
            $collection->addCollection($this->loader
                ->load($class, $type));
        }
    }
    return $collection;
}
RSS feed
Powered by Drupal