8000 [DependencyInjection] Escape `%` from parameter-like default values · symfony/symfony@8d2fff0 · GitHub
[go: up one dir, main page]

Skip to content

Commit 8d2fff0

Browse files
committed
[DependencyInjection] Escape % from parameter-like default values
1 parent 3bc1a40 commit 8d2fff0

File tree

3 files changed

+22
-0
lines changed
  • src/Symfony/Component/DependencyInjection
    • Compiler
    • < 8000 div class="PRIVATE_TreeView-item-toggle prc-TreeView-TreeViewItemToggle-gWUdE prc-TreeView-TreeViewItemToggleHover-nEgP- prc-TreeView-TreeViewItemToggleEnd-t-AEB">
      Tests

3 files changed

+22
-0
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,8 @@ private function autowireCalls(\ReflectionClass $reflectionClass, bool $isRoot,
207207
if (\PHP_VERSION_ID >= 80100 && (\is_array($value->value) ? $value->value : \is_object($value->value))) {
208208
unset($arguments[$j]);
209209
$namedArguments = $value->names;
210+
} elseif ($value instanceof $this->defaultArgument && \is_string($value->value)) {
211+
$arguments[$j] = preg_replace('/(?<!%)(%)([^%]+)\1/', '%%\2%%', $value->value);
210212
} else {
211213
$arguments[$j] = $value->value;
212214
}

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1219,4 +1219,17 @@ public function testAutowireWithNamedArgs()
12191219

12201220
$this->assertEquals([new TypedReference(A::class, A::class), 'abc'], $container->getDefinition('foo')->getArguments());
12211221
}
1222+
1223+
public function testAutowireDefaultValueParametersLike()
1224+
{
1225+
$container = new ContainerBuilder();
1226+
1227+
$container->register('foo', ParametersLikeDefaultValue::class)
1228+
->setAutowired(true)
1229+
->setArgument(1, 'ok');
1230+
1231+
(new AutowirePass())->process($container);
1232+
1233+
$this->assertEquals('%%not%%one%%parameter%%here%', $container->getDefinition('foo')->getArgument(0));
1234+
}
12221235
}

src/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/autowiring_classes.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,3 +431,10 @@ public function __construct(NotExisting $notExisting)
431431
{
432432
}
433433
}
434+
435+
class ParametersLikeDefaultValue
436+
{
437+
public function __construct(string $parameterLike = '%not%one%parameter%here%', string $willBeSetToKeepFirstArgumentDefaultValue = 'ok')
438+
{
439+
}
440+
}

0 commit comments

Comments
 (0)
0