Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit cdf9e79

Browse files
committed
Add query parser
1 parent 345b19b commit cdf9e79

File tree

5 files changed

+158
-1
lines changed

5 files changed

+158
-1
lines changed

src/Symfony/Component/DependencyInjection/CHANGELOG.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
CHANGELOG
22
=========
33

4+
4.3.0
5+
-----
6+
7+
* added `%env(url:...)%` processor to convert an URL or DNS into an array of components
8+
* added `%env(query:...)%` processor to convert a query string into an array of key values
9+
410
4.2.0
511
-----
612

@@ -10,7 +16,6 @@ CHANGELOG
1016
* added `ServiceLocatorArgument` and `!service_locator` config tag for creating optimized service-locators
1117
* added support for autoconfiguring bindings
1218
* added `%env(key:...)%` processor to fetch a specific key from an array
13-
* added `%env(url:...)%` processor to parse an URL or DNS
1419
* deprecated `ServiceSubscriberInterface`, use the same interface from the `Symfony\Contracts\Service` namespace instead
1520
* deprecated `ResettableContainerInterface`, use `Symfony\Contracts\Service\ResetInterface` instead
1621

src/Symfony/Component/DependencyInjection/EnvVarProcessor.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public static function getProvidedTypes()
4444
'json' => 'array',
4545
'key' => 'bool|int|float|string|array',
4646
'url' => 'array',
47+
'query' => 'array',
4748
'resolve' => 'string',
4849
'string' => 'string',
4950
);
@@ -182,6 +183,12 @@ public function getEnv($prefix, $name, \Closure $getEnv)
182183
return $env;
183184
}
184185

186+
if ('query' === $prefix) {
187+
\parse_str($env, $result);
188+
189+
return $result;
190+
}
191+
185192
if ('resolve' === $prefix) {
186193
return preg_replace_callback('/%%|%([^%\s]+)%/', function ($match) use ($name) {
187194
if (!isset($match[1])) {

src/Symfony/Component/DependencyInjection/Tests/Compiler/RegisterEnvVarProcessorsPassTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public function testSimpleProcessor()
4040
'json' => array('array'),
4141
'key' => array('bool', 'int', 'float', 'string', 'array'),
4242
'url' => array('array'),
43+
'query' => array('array'),
4344
'resolve' => array('string'),
4445
'string' => array('string'),
4546
);

src/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,26 @@ public function testDumpedUrlEnvParameters()
465465
), $container->getParameter('hello'));
466466
}
467467

468+
public function testDumpedQueryEnvParameters()
469+
{
470+
$container = new ContainerBuilder();
471+
$container->setParameter('env(foo)', 'foo=bar&baz[]=qux');
472+
$container->setParameter('hello', '%env(query:foo)%');
473+
$container->compile();
474+
475+
$dumper = new PhpDumper($container);
476+
$dumper->dump();
477+
478+
$this->assertStringEqualsFile(self::$fixturesPath.'/php/services_query_env.php', $dumper->dump(array('class' => 'Symfony_DI_PhpDumper_Test_QueryParameters')));
479+
480+
require self::$fixturesPath.'/php/services_query_env.php';
481+
$container = new \Symfony_DI_PhpDumper_Test_QueryParameters();
482+
$this->assertSame(array(
483+
'foo' => 'bar',
484+
'baz' => array('qux'),
485+
), $container->getParameter('hello'));
486+
}
487+
468488
public function testDumpedJsonEnvParameters()
469489
{
470490
$container = new ContainerBuilder();
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
<?php
2+
3+
use Symfony\Component\DependencyInjection\Argument\RewindableGenerator;
4+
use Symfony\Component\DependencyInjection\ContainerInterface;
5+
use Symfony\Component\DependencyInjection\Container;
6+
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
7+
use Symfony\Component\DependencyInjection\Exception\LogicException;
8+
use Symfony\Component\DependencyInjection\Exception\RuntimeException;
9+
use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag;
10+
11+
/**
12+
* This class has been auto-generated
13+
* by the Symfony Dependency Injection Component.
14+
*
15+
* @final since Symfony 3.3
16+
*/
17+
class Symfony_DI_PhpDumper_Test_QueryParameters extends Container
18+
{
19+
private $parameters;
20+
private $targetDirs = array();
21+
22+
public function __construct()
23+
{
24+
$this->parameters = $this->getDefaultParameters();
25+
26+
$this->services = $this->privates = array();
27+
28+
$this->aliases = array();
29+
}
30+
31+
public function compile()
32+
{
33+
throw new LogicException('You cannot compile a dumped container that was already compiled.');
34+
}
35+
36+
public function isCompiled()
37+
{
38+
return true;
39+
}
40+
41+
public function getRemovedIds()
42+
{
43+
return array(
44+
'Psr\\Container\\ContainerInterface' => true,
45+
'Symfony\\Component\\DependencyInjection\\ContainerInterface' => true,
46+
);
47+
}
48+
49+
public function getParameter($name)
50+
{
51+
$name = (string) $name;
52+
53+
if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters))) {
54+
throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name));
55+
}
56+
if (isset($this->loadedDynamicParameters[$name])) {
57+
return $this->loadedDynamicParameters[$name] ? $this->dynamicParameters[$name] : $this->getDynamicParameter($name);
58+
}
59+
60+
return $this->parameters[$name];
61+
}
62+
63+
public function hasParameter($name)
64+
{
65+
$name = (string) $name;
66+
67+
return isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters);
68+
}
69+
70+
public function setParameter($name, $value)
71+
{
72+
throw new LogicException('Impossible to call set() on a frozen ParameterBag.');
73+
}
74+
75+
public function getParameterBag()
76+
{
77+
if (null === $this->parameterBag) {
78+
$parameters = $this->parameters;
79+
foreach ($this->loadedDynamicParameters as $name => $loaded) {
80+
$parameters[$name] = $loaded ? $this->dynamicParameters[$name] : $this->getDynamicParameter($name);
81+
}
82+
$this->parameterBag = new FrozenParameterBag($parameters);
83+
}
84+
85+
return $this->parameterBag;
86+
}
87+
88+
private $loadedDynamicParameters = array(
89+
'hello' => false,
90+
);
91+
private $dynamicParameters = array();
92+
93+
/**
94+
* Computes a dynamic parameter.
95+
*
96+
* @param string The name of the dynamic parameter to load
97+
*
98+
* @return mixed The value of the dynamic parameter
99+
*
100+
* @throws InvalidArgumentException When the dynamic parameter does not exist
101+
*/
102+
private function getDynamicParameter($name)
103+
{
104+
switch ($name) {
105+
case 'hello': $value = $this->getEnv('query:foo'); break;
106+
default: throw new InvalidArgumentException(sprintf('The dynamic parameter "%s" must be defined.', $name));
107+
}
108+
$this->loadedDynamicParameters[$name] = true;
109+
110+
return $this->dynamicParameters[$name] = $value;
111+
}
112+
113+
/**
114+
* Gets the default parameters.
115+
*
116+
* @return array An array of the default parameters
117+
*/
118+
protected function getDefaultParameters()
119+
{
120+
return array(
121+
'env(foo)' => 'foo=bar&baz[]=qux',
122+
);
123+
}
124+
}

0 commit comments

Comments
 (0)