8000 [DI] Reference instead of inline for array-params · symfony/symfony@7c3d0c7 · GitHub
[go: up one dir, main page]

Skip to content

Commit 7c3d0c7

Browse files
[DI] Reference instead of inline for array-params
1 parent 8bbfc96 commit 7c3d0c7

File tree

10 files changed

+252
-28
lines changed

10 files changed

+252
-28
lines changed

src/Symfony/Component/DependencyInjection/Compiler/PassConfig.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public function __construct()
5151
new ResolveDefinitionTemplatesPass(),
5252
new ServiceLocatorTagPass(),
5353
new DecoratorServicePass(),
54-
new ResolveParameterPlaceHoldersPass(),
54+
new ResolveParameterPlaceHoldersPass(false),
5555
new ResolveFactoryClassPass(),
5656
new FactoryReturnTypePass($resolveClassPass),
5757
new CheckDefinitionValidityPass(),

src/Symfony/Component/DependencyInjection/Compiler/ResolveParameterPlaceHoldersPass.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@
2323
class ResolveParameterPlaceHoldersPass extends AbstractRecursivePass
2424
{
2525
private $bag;
26+
private $resolveArrays;
27+
28+
public function __construct($resolveArrays = true)
29+
{
30+
$this->resolveArrays = $resolveArrays;
31+
}
2632

2733
/**
2834
* {@inheritdoc}
@@ -55,7 +61,9 @@ public function process(ContainerBuilder $container)
5561
protected function processValue($value, $isRoot = false)
5662
{
5763
if (is_string($value)) {
58-
return $this->bag->resolveValue($value);
64+
$v = $this->bag->resolveValue($value);
65+
66+
return $this->resolveArrays || !$v || !is_array($v) ? $v : $value;
5967
}
6068
if ($value instanceof Definition) {
6169
$changes = $value->getChanges();

src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,10 +1061,12 @@ private function addDefaultParametersMethod()
10611061
*/
10621062
public function getParameter($name)
10631063
{
1064-
$name = strtolower($name);
1064+
if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters))) {
1065+
$name = strtolower($name);
10651066
1066-
if (!(isset($this->parameters[$name]) || array_key_exists($name, $this->parameters) || isset($this->loadedDynamicParameters[$name]))) {
1067-
throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name));
1067+
if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters))) {
1068+
throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name));
1069+
}
10681070
}
10691071
if (isset($this->loadedDynamicParameters[$name])) {
10701072
return $this->loadedDynamicParameters[$name] ? $this->dynamicParameters[$name] : $this->getDynamicParameter($name);
@@ -1080,7 +1082,7 @@ public function hasParameter($name)
10801082
{
10811083
$name = strtolower($name);
10821084
1083-
return isset($this->parameters[$name]) || array_key_exists($name, $this->parameters) || isset($this->loadedDynamicParameters[$name]);
1085+
return isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters);
10841086
}
10851087
10861088
/**
@@ -1580,11 +1582,22 @@ private function dumpLiteralClass($class)
15801582
*/
15811583
private function dumpParameter($name)
15821584
{
1585+
$name = strtolower($name);
1586+
15831587
if ($this->container->isCompiled() && $this->container->hasParameter($name)) {
1584-
return $this->dumpValue($this->container->getParameter($name), false);
1588+
$value = $this->container->getParameter($name);
1589+
$dumpedValue = $this->dumpValue($value, false);
1590+
1591+
if (!$value || !is_array($value)) {
1592+
return $dumpedValue;
1593+
}
1594+
1595+
if (!preg_match("/\\\$this->(?:getEnv\('\w++'\)|targetDirs\[\d++\])/", $dumpedValue)) {
1596+
return sprintf("\$this->parameters['%s']", $name);
1597+
}
15851598
}
15861599

1587-
return sprintf("\$this->getParameter('%s')", strtolower($name));
1600+
return sprintf("\$this->getParameter('%s')", $name);
15881601
}
15891602

15901603
/**

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -584,4 +584,18 @@ public function testPrivateWithIgnoreOnInvalidReference()
584584
$container = new \Symfony_DI_PhpDumper_Test_Private_With_Ignore_On_Invalid_Reference();
585585
$this->assertInstanceOf('BazClass', $container->get('bar')->getBaz());
586586
}
587+
588+
public function testArrayParameters()
589+
{
590+
$container = new ContainerBuilder();
591+
$container->setParameter('array_1', array(123));
592+
$container->setParameter('array_2', array(__DIR__));
593+
$container->register('bar', 'BarClass')
594+
->addMethodCall('setBaz', array('%array_1%', '%array_2%', '%%array_1%%'));
595+
$container->compile();
596+
597+
$dumper = new PhpDumper($container);
598+
599+
$this->assertStringEqualsFile(self::$fixturesPath.'/php/services_array_params.php', str_replace('\\\\Dumper', '/Dumper', $dumper->dump(array('file' => self::$fixturesPath.'/php/services_array_params.php'))));
600+
}
587601
}

src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services10.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,12 @@ protected function getTestService()
8080
*/
8181
public function getParameter($name)
8282
{
83-
$name = strtolower($name);
83+
if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters))) {
84+
$name = strtolower($name);
8485

85-
if (!(isset($this->parameters[$name]) || array_key_exists($name, $this->parameters) || isset($this->loadedDynamicParameters[$name]))) {
86-
throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name));
86+
if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters))) {
87+
throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name));
88+
}
8789
}
8890
if (isset($this->loadedDynamicParameters[$name])) {
8991
return $this->loadedDynamicParameters[$name] ? $this->dynamicParameters[$name] : $this->getDynamicParameter($name);
@@ -99,7 +101,7 @@ public function hasParameter($name)
99101
{
100102
$name = strtolower($name);
101103

102-
return isset($this->parameters[$name]) || array_key_exists($name, $this->parameters) || isset($this->loadedDynamicParameters[$name]);
104+
return isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters);
103105
}
104106

105107
/**

src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services12.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,12 @@ protected function getTestService()
8484
*/
8585
public function getParameter($name)
8686
{
87-
$name = strtolower($name);
87+
if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters))) {
88+
$name = strtolower($name);
8889

89-
if (!(isset($this->parameters[$name]) || array_key_exists($name, $this->parameters) || isset($this->loadedDynamicParameters[$name]))) {
90-
throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name));
90+
if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters))) {
91+
throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name));
92+
}
9193
}
9294
if (isset($this->loadedDynamicParameters[$name])) {
9395
return $this->loadedDynamicParameters[$name] ? $this->dynamicParameters[$name] : $this->getDynamicParameter($name);
@@ -103,7 +105,7 @@ public function hasParameter($name)
103105
{
104106
$name = strtolower($name);
105107

106-
return isset($this->parameters[$name]) || array_key_exists($name, $this->parameters) || isset($this->loadedDynamicParameters[$name]);
108+
return isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters);
107109
}
108110

109111
/**

src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services26.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,12 @@ protected function getTestService()
8282
*/
8383
public function getParameter($name)
8484
{
85-
$name = strtolower($name);
85+
if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters))) {
86+
$name = strtolower($name);
8687

87-
if (!(isset($this->parameters[$name]) || array_key_exists($name, $this->parameters) || isset($this->loadedDynamicParameters[$name]))) {
88-
throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name));
88+
if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters))) {
89+
throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name));
90+
}
8991
}
9092
if (isset($this->loadedDynamicParameters[$name])) {
9193
return $this->loadedDynamicParameters[$name] ? $this->dynamicParameters[$name] : $this->getDynamicParameter($name);
@@ -101,7 +103,7 @@ public function hasParameter($name)
101103
{
102104
$name = strtolower($name);
103105

104-
return isset($this->parameters[$name]) || array_key_exists($name, $this->paramet 1CF5 ers) || isset($this->loadedDynamicParameters[$name]);
106+
return isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters);
105107
}
106108

107109
/**

src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services8.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,12 @@ public function isFrozen()
6464
*/
6565
public function getParameter($name)
6666
{
67-
$name = strtolower($name);
67+
if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters))) {
68+
$name = strtolower($name);
6869

69-
if (!(isset($this->parameters[$name]) || array_key_exists($name, $this->parameters) || isset($this->loadedDynamicParameters[$name]))) {
70-
throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name));
70+
if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters))) {
71+
throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name));
72+
}
7173
}
7274
if (isset($this->loadedDynamicParameters[$name])) {
7375
return $this->loadedDynamicParameters[$name] ? $this->dynamicParameters[$name] : $this->getDynamicParameter($name);
@@ -83,7 +85,7 @@ public function hasParameter($name)
8385
{
8486
$name = strtolower($name);
8587

86-
return isset($this->parameters[$name]) || array_key_exists($name, $this->parameters) || isset($this->loadedDynamicParameters[$name]);
88+
return isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters);
8789
}
8890

8991
/**

src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_compiled.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -391,10 +391,12 @@ protected function getServiceFromStaticMethodService()
391391
*/
392392
public function getParameter($name)
393393
{
394-
$name = strtolower($name);
394+
if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters))) {
395+
$name = strtolower($name);
395396

396-
if (!(isset($this->parameters[$name]) || array_key_exists($name, $this->parameters) || isset($this->loadedDynamicParameters[$name]))) {
397-
throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name));
397+
if (!(isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters))) {
398+
throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name));
399+
}
398400
}
399401
if (isset($this->loadedDynamicParameters[$name])) {
400402
return $this->loadedDynamicParameters[$name] ? $this->dynamicParameters[$name] : $this->getDynamicParameter($name);
@@ -410,7 +412,7 @@ public function hasParameter($name)
410412
{
411413
$name = strtolower($name);
412414

413-
return isset($this->parameters[$name]) || array_key_exists($name, $this->parameters) || isset($this->loadedDynamicParameters[$name]);
415+
return isset($this->parameters[$name]) || isset($this->loadedDynamicParameters[$name]) || array_key_exists($name, $this->parameters);
414416
}
415417

416418
/**

0 commit comments

Comments
 (0)
0