/src/Symfony/Component/Routing/Loader/AnnotationGlobLoader.php
PHP | 76 lines | 28 code | 8 blank | 40 comment | 4 complexity | 8fc1242ddb14697c7491907cd39aea9d MD5 | raw file
- <?php
- /*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Symfony\Component\Routing\Loader;
- use Symfony\Component\Routing\RouteCollection;
- /**
- * AnnotationGlobLoader loads routing information from annotations set
- * on PHP classes and methods.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- */
- class AnnotationGlobLoader extends AnnotationDirectoryLoader
- {
- /**
- * Loads from annotations from a directory glob pattern.
- *
- * @param string $glob A directory glob pattern containing "*"
- * @param string $type The resource type
- *
- * @return RouteCollection A RouteCollection instance
- *
- * @throws \InvalidArgumentException When route can't be parsed
- */
- public function load($glob, $type = null)
- {
- $collection = new RouteCollection();
- foreach ($this->getAbsolutePaths($glob) as $path) {
- $collection->addCollection(parent::load($path, $type));
- }
- return $collection;
- }
- /**
- * Returns true if this class supports the given resource.
- *
- * @param mixed $resource A resource
- * @param string $type The resource type
- *
- * @return Boolean True if this class supports the given resource, false otherwise
- */
- public function supports($resource, $type = null)
- {
- return is_string($resource) && false !== strpos($resource, '*') && (!$type || 'annotation' === $type);
- }
- /**
- * Gets all absolute paths matched by expanding the glob pattern within all
- * resource search paths.
- *
- * @param string $glob
- *
- * @return array An array of paths matching the glob pattern
- */
- private function getAbsolutePaths($glob)
- {
- $dirs = array();
- foreach ($this->paths as $path) {
- if (false !== ($d = glob($path.DIRECTORY_SEPARATOR.$glob, GLOB_ONLYDIR | GLOB_BRACE))) {
- $dirs = array_merge($dirs, $d);
- }
- }
- return $dirs;
- }
- }