[ Index ]

PHP Cross Reference of phpBB-3.1.12-deutsch

title

Body

[close]

/vendor/symfony/routing/Symfony/Component/Routing/Loader/ -> AnnotationDirectoryLoader.php (source)

   1  <?php
   2  
   3  /*
   4   * This file is part of the Symfony package.
   5   *
   6   * (c) Fabien Potencier <fabien@symfony.com>
   7   *
   8   * For the full copyright and license information, please view the LICENSE
   9   * file that was distributed with this source code.
  10   */
  11  
  12  namespace Symfony\Component\Routing\Loader;
  13  
  14  use Symfony\Component\Routing\RouteCollection;
  15  use Symfony\Component\Config\Resource\DirectoryResource;
  16  
  17  /**
  18   * AnnotationDirectoryLoader loads routing information from annotations set
  19   * on PHP classes and methods.
  20   *
  21   * @author Fabien Potencier <fabien@symfony.com>
  22   */
  23  class AnnotationDirectoryLoader extends AnnotationFileLoader
  24  {
  25      /**
  26       * Loads from annotations from a directory.
  27       *
  28       * @param string      $path A directory path
  29       * @param string|null $type The resource type
  30       *
  31       * @return RouteCollection A RouteCollection instance
  32       *
  33       * @throws \InvalidArgumentException When the directory does not exist or its routes cannot be parsed
  34       */
  35      public function load($path, $type = null)
  36      {
  37          $dir = $this->locator->locate($path);
  38  
  39          $collection = new RouteCollection();
  40          $collection->addResource(new DirectoryResource($dir, '/\.php$/'));
  41          $files = iterator_to_array(new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($dir), \RecursiveIteratorIterator::LEAVES_ONLY));
  42          usort($files, function (\SplFileInfo $a, \SplFileInfo $b) {
  43              return (string) $a > (string) $b ? 1 : -1;
  44          });
  45  
  46          foreach ($files as $file) {
  47              if (!$file->isFile() || '.php' !== substr($file->getFilename(), -4)) {
  48                  continue;
  49              }
  50  
  51              if ($class = $this->findClass($file)) {
  52                  $refl = new \ReflectionClass($class);
  53                  if ($refl->isAbstract()) {
  54                      continue;
  55                  }
  56  
  57                  $collection->addCollection($this->loader->load($class, $type));
  58              }
  59          }
  60  
  61          return $collection;
  62      }
  63  
  64      /**
  65       * {@inheritdoc}
  66       */
  67      public function supports($resource, $type = null)
  68      {
  69          if (!is_string($resource)) {
  70              return false;
  71          }
  72          
  73          try {
  74              $path = $this->locator->locate($resource);
  75          } catch (\Exception $e) {
  76              return false;
  77          }
  78  
  79          return is_dir($path) && (!$type || 'annotation' === $type);
  80      }
  81  }


Generated: Thu Jan 11 00:25:41 2018 Cross-referenced by PHPXref 0.7.1