/
AnnotationGlobLoader.php
76 lines (68 loc) · 2.12 KB
/
AnnotationGlobLoader.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?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;
}
}