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

Skip to content

Commit b2a5967

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

File tree

4 files changed

+88
-0
lines changed

4 files changed

+88
-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: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
< 10000 /td>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Routing\Matcher;
13+
14+
use Symfony\Component\ExpressionLanguage\ExpressionFunction;
15+
use Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface;
16+
17+
/**
18+
* Defines some ExpressionLanguage functions.
19+
*
20+
* @author Ahmed TAILOULOUTE <ahmed.tailouloute@gmail.com>
21+
*/
22+
class ExpressionLanguageProvider implements ExpressionFunctionProviderInterface
23+
{
24+
/**
25+
* {@inheritdoc}
26+
*/
27+
public function getFunctions()
28+
{
29+
return [
30+
new ExpressionFunction(
31+
'env',
32+
static function ($str, $default = 'null') {
33+
return sprintf('($_SERVER[%s] ?? %s)', $str, $default);
34+
},
35+
static function ($arguments, $str, $default = null) {
36+
return $_SERVER[$str] ?? $default;
37+
}
38+
),
39+
];
40+
}
41+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
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+
['env("test__unknown_env_variable", "default")', 'default'],
35+
];
36+
}
37+
38+
public function tearDown()
39+
{
40+
unset($_SERVER['test__APP_ENV'], $_SERVER['test__PHP_VERSION']);
41+
}
42+
}

0 commit comments

Comments
 (0)
0