Skip to content

Commit 08fe216

Browse files
author
avorobiev
committed
[DependencyInjection] Unescape class arguments
1 parent d0e1547 commit 08fe216

File tree

5 files changed

+34
-3
lines changed

5 files changed

+34
-3
lines changed

src/Symfony/Component/DependencyInjection/ContainerBuilder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -732,7 +732,7 @@ private function createService(Definition $definition, $id)
732732
require_once $this->getParameterBag()->resolveValue($definition->getFile());
733733
}
734734

735-
$arguments = $this->resolveServices($this->getParameterBag()->resolveValue($definition->getArguments()));
735+
$arguments = $this->resolveServices($this->getParameterBag()->resolveAndUnescapeValue($definition->getArguments()));
736736

737737
if (null !== $definition->getFactoryMethod()) {
738738
if (null !== $definition->getFactoryClass()) {

src/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,4 +291,14 @@ private function unescapeValue($value)
291291

292292
return $value;
293293
}
294+
295+
/**
296+
* Resolves parameters inside a string and unescape result
297+
*
298+
* @see resolveValue, unescapeValue
299+
*/
300+
public function resolveAndUnescapeValue($value, array $resolving = array())
301+
{
302+
return $this->unescapeValue($this->resolveValue($value, $resolving));
303+
}
294304
}

src/Symfony/Component/DependencyInjection/ParameterBag/ParameterBagInterface.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,4 +103,15 @@ function resolveValue($value);
103103
* @return mixed
104104
*/
105105
function escapeValue($value);
106+
107+
/**
108+
* Replaces parameter placeholders (%name%) by their values and unescape (%%) result.
109+
*
110+
* @param mixed $value A value
111+
*
112+
* @throws ParameterNotFoundException if a placeholder references a parameter that does not exist
113+
* @throws ParameterCircularReferenceException if a circular reference if detected
114+
* @throws RuntimeException when a given parameter has a type problem.
115+
*/
116+
function resolveAndUnescapeValue($value);
106117
}

src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,9 +251,9 @@ public function testCreateServiceArguments()
251251
{
252252
$builder = new ContainerBuilder();
253253
$builder->register('bar', 'stdClass');
254-
$builder->register('foo1', 'FooClass')->addArgument(array('foo' => '%value%', '%value%' => 'foo', new Reference('bar')));
254+
$builder->register('foo1', 'FooClass')->addArgument(array('foo' => '%value%', '%value%' => 'foo', new Reference('bar'), '%%unescape_it%%'));
255255
$builder->setParameter('value', 'bar');
256-
$this->assertEquals(array('foo' => 'bar', 'bar' => 'foo', $builder->get('bar')), $builder->get('foo1')->arguments, '->createService() replaces parameters and service references in the arguments provided by the service definition');
256+
$this->assertEquals(array('foo' => 'bar', 'bar' => 'foo', $builder->get('bar'), '%unescape_it%'), $builder->get('foo1')->arguments, '->createService() replaces parameters and service references in the arguments provided by the service definition');
257257
}
258258

259259
/**

src/Symfony/Component/DependencyInjection/Tests/ParameterBag/ParameterBagTest.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,4 +241,14 @@ public function stringsWithSpacesProvider()
241241
array('50% is less than 100%', '50% is less than 100%', 'Text between % signs is allowed, if there are spaces.'),
242242
);
243243
}
244+
245+
/**
246+
* @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag::resolveAndUnescapeValue
247+
*/
248+
public function testResolveAndUnescapeValue()
249+
{
250+
$bag = new ParameterBag();
251+
$this->assertEquals('foo', $bag->resolveAndUnescapeValue('foo'), 'There is nothing to unescape.');
252+
$this->assertEquals('%foo%', $bag->resolveAndUnescapeValue('%%foo%%'), 'String should be unescaped.');
253+
}
244254
}

0 commit comments

Comments
 (0)