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

Breadcrumb

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

class AttributeDirectoryLoader

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

@author Fabien Potencier <fabien@symfony.com> @author Alexandre Daubois <alex.daubois@gmail.com>

Hierarchy

  • class \Symfony\Component\Routing\Loader\AttributeFileLoader extends \Symfony\Component\Config\Loader\FileLoader
    • class \Symfony\Component\Routing\Loader\AttributeDirectoryLoader extends \Symfony\Component\Routing\Loader\AttributeFileLoader

Expanded class hierarchy of AttributeDirectoryLoader

File

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

Namespace

Symfony\Component\Routing\Loader
View source
class AttributeDirectoryLoader extends AttributeFileLoader {
    
    /**
     * @throws \InvalidArgumentException When the directory does not exist or its routes cannot be parsed
     */
    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;
    }
    public function supports(mixed $resource, ?string $type = null) : bool {
        if (!\is_string($resource)) {
            return false;
        }
        if ('attribute' === $type) {
            return true;
        }
        if ($type) {
            return false;
        }
        try {
            return is_dir($this->locator
                ->locate($resource));
        } catch (\Exception) {
            return false;
        }
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title
AttributeDirectoryLoader::load public function Overrides AttributeFileLoader::load
AttributeDirectoryLoader::supports public function Overrides AttributeFileLoader::supports
AttributeFileLoader::findClass protected function Returns the full class name for the first class in the file.
AttributeFileLoader::__construct public function

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal