14
14
use Symfony \Bundle \FrameworkBundle \Controller \ControllerNameParser ;
15
15
use Symfony \Component \Config \Loader \DelegatingLoader as BaseDelegatingLoader ;
16
16
use Symfony \Component \Config \Loader \LoaderResolverInterface ;
17
+ use Symfony \Component \DependencyInjection \ContainerInterface ;
17
18
use Symfony \Component \HttpKernel \Log \LoggerInterface ;
19
+ use Symfony \Component \Routing \Route ;
18
20
19
21
/**
20
22
* DelegatingLoader delegates route loading to other loaders using a loader resolver.
@@ -28,6 +30,7 @@ class DelegatingLoader extends BaseDelegatingLoader
28
30
{
29
31
protected $ parser ;
30
32
protected $ logger ;
33
+ protected $ parameterBag ;
31
34
32
35
/**
33
36
* Constructor.
@@ -36,10 +39,11 @@ class DelegatingLoader extends BaseDelegatingLoader
36
39
* @param LoggerInterface $logger A LoggerInterface instance
37
40
* @param LoaderResolverInterface $resolver A LoaderResolverInterface instance
38
41
*/
39
- public function __construct (ControllerNameParser $ parser , LoggerInterface $ logger = null , LoaderResolverInterface $ resolver )
42
+ public function __construct (ContainerInterface $ container , ControllerNameParser $ parser , LoggerInterface $ logger = null , LoaderResolverInterface $ resolver )
40
43
{
41
44
$ this ->parser = $ parser ;
42
45
$ this ->logger = $ logger ;
46
+ $ this ->parameterBag = $ container ->getParameterBag ();
43
47
44
48
parent ::__construct ($ resolver );
45
49
}
@@ -57,6 +61,8 @@ public function load($resource, $type = null)
57
61
$ collection = parent ::load ($ resource , $ type );
58
62
59
63
foreach ($ collection ->all () as $ name => $ route ) {
64
+ $ this ->resolveParameters ($ route );
65
+
60
66
if ($ controller = $ route ->getDefault ('_controller ' )) {
61
67
try {
62
68
$ controller = $ this ->parser ->parse ($ controller );
@@ -70,4 +76,18 @@ public function load($resource, $type = null)
70
76
71
77
return $ collection ;
72
78
}
79
+
80
+ /**
81
+ * Replace container parameters inside route pattern and requirements.
82
+ *
83
+ * @param Route $route A route
84
+ */
85
+ protected function resolveParameters (Route $ route )
86
+ {
87
+ $ route ->setPattern ($ this ->parameterBag ->resolveValue ($ route ->getPattern ()));
88
+
89
+ foreach ($ route ->getRequirements () as $ key => $ regex ) {
90
+ $ route ->setRequirement ($ key , $ this ->parameterBag ->resolveValue ($ regex ));
91
+ }
92
+ }
73
93
}
0 commit comments