8000 [Routing] Use env() in route condition · symfony/symfony@d71b869 · GitHub
[go: up one dir, main page]

Skip to content

Commit d71b869

Browse files
committed
[Routing] Use env() in route condition
1 parent f46ab58 commit d71b869

File tree

4 files changed

+78
-0
lines changed

4 files changed

+78
-0
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,5 +115,9 @@
115115
<service id="Symfony\Bundle\FrameworkBundle\Controller\TemplateController" public="true">
116116
<argument type="service" id="twig" on-invalid="ignore" />
117117
</service>
118+
119+
<service id="Symfony\Component\Routing\Matcher\ExpressionLanguageProvider" public="false">
120+
<tag name="routing.expression_language_provider" />
121+
</service>
118122
</services>
119123
</container>

src/Symfony/Component/Routing/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ CHANGELOG
88
* deprecated `RouteCollectionBuilder` in favor of `RoutingConfigurator`.
99
* added "priority" option to annotated routes
1010
* added argument `$priority` to `RouteCollection::add()`
11+
* added `ExpressionLanguageProvider` that provides `env` function.
1112

1213
5.0.0
1314
-----
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
namespace Symfony\Component\Routing\Matcher;
4+
5+
use Symfony\Component\ExpressionLanguage\ExpressionFunction;
6+
use Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface;
7+
8+
/**
9+
* Define some ExpressionLanguage functions.
10+
*
11+
* @author Ahmed TAILOULOUTE <ahmed.tailouloute@gmail.com>
12+
*/
13+
class ExpressionLanguageProvider implements ExpressionFunctionProviderInterface
14+
{
15+
/**
16+
* @inheritDoc
17+
*/
18+
public function getFunctions()
19+
{
20+
return [
21+
new ExpressionFunction(
22+
'env',
23+
static function ($str) {
24+
return sprintf('($_SERVER[%s] ?? null)', $str);
25+
},
26+
static function ($arguments, $str) {
27+
return $_SERVER[$str] ?? null;
28+
}
29+
)
30+
];
31+
}
32+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
namespace Symfony\Component\Routing\Tests\Matcher;
4+
5+
use PHPUnit\Framework\TestCase;
6+
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
7+
use Symfony\Component\Routing\Matcher\ExpressionLanguageProvider;
8+
9+
class ExpressionLanguageTest extends TestCase
10+
{
11+
public function setUp()
12+
{
13+
$_SERVER['test__APP_ENV'] = 'test';
14+
$_SERVER['test__PHP_VERSION'] = '7.2';
15+
}
16+
17+
/**
18+
* @dataProvider provider
19+
*/
20+
public function testEnv(string $expression, $expected): void
21+
{
22+
$expressionLanguage = new ExpressionLanguage();
23+
$expressionLanguage->registerProvider(new ExpressionLanguageProvider());
24+
25+
$this->assertEquals($expected, $expressionLanguage->evaluate($expression));
26+
}
27+
28+
public function provider(): array
29+
{
30+
return [
31+
['env("test__APP_ENV")', 'test'],
32+
['env("test__PHP_VERSION")', '7.2'],
33+
['env("test__unknown_env_variable")', null],
34+
];
35+
}
36+
37+
public function tearDown()
38+
{
39+
unset($_SERVER['test__APP_ENV'], $_SERVER['test__PHP_VERSION']);
40+
}
41+
}

0 commit comments

Comments
 (0)
0