8000 [Routing] Allow using kernel parameters in routes · helmer/symfony@47d5a81 · GitHub
[go: up one dir, main page]

Skip to content

Commit 47d5a81

Browse files
committed
[Routing] Allow using kernel parameters in routes
1 parent 7eb22a7 commit 47d5a81

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

src/Symfony/Bundle/FrameworkBundle/Resources/config/routing.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444

4545
<service id="routing.loader" class="%routing.loader.class%">
4646
<tag name="monolog.logger" channel="router" />
47+
<argument type="service" id="service_container" />
4748
<argument type="service" id="controller_name_converter" />
4849
<argument type="service" id="logger" on-invalid="null" />
4950
<argument type="service" id="routing.resolver" />

src/Symfony/Bundle/FrameworkBundle/Routing/DelegatingLoader.php

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
use Symfony\Bundle\FrameworkBundle\Controller\ControllerNameParser;
1515
use Symfony\Component\Config\Loader\DelegatingLoader as BaseDelegatingLoader;
1616
use Symfony\Component\Config\Loader\LoaderResolverInterface;
17+
use Symfony\Component\DependencyInjection\ContainerInterface;
1718
use Symfony\Component\HttpKernel\Log\LoggerInterface;
19+
use Symfony\Component\Routing\Route;
1820

1921
/**
2022
* DelegatingLoader delegates route loading to other loaders using a loader resolver.
@@ -28,6 +30,7 @@ class DelegatingLoader extends BaseDelegatingLoader
2830
{
2931
protected $parser;
3032
protected $logger;
33+
protected $parameterBag;
3134

3235
/**
3336
* Constructor.
@@ -36,10 +39,11 @@ class DelegatingLoader extends BaseDelegatingLoader
3639
* @param LoggerInterface $logger A LoggerInterface instance
3740
* @param LoaderResolverInterface $resolver A LoaderResolverInterface instance
3841
*/
39-
public function __construct(ControllerNameParser $parser, LoggerInterface $logger = null, LoaderResolverInterface $resolver)
42+
public function __construct(ContainerInterface $container, ControllerNameParser $parser, LoggerInterface $logger = null, LoaderResolverInterface $resolver)
4043
{
4144
$this->parser = $parser;
4245
$this->logger = $logger;
46+
$this->parameterBag = $container->getParameterBag();
4347

4448
parent::__construct($resolver);
4549
}
@@ -57,6 +61,8 @@ public function load($resource, $type = null)
5761
$collection = parent::load($resource, $type);
5862

5963
foreach ($collection->all() as $name => $route) {
64+
$this->resolveParameters($route);
65+
6066
if ($controller = $route->getDefault('_controller')) {
6167
try {
6268
$controller = $this->parser->parse($controller);
@@ -70,4 +76,18 @@ public function load($resource, $type = null)
7076

7177
return $collection;
7278
}
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+
}
7393
}

0 commit comments

Comments
 (0)
0