From 66f3b87f47cdb9fb756da86c457a3d3f548ee94d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Sat, 3 Dec 2016 12:19:20 +0100 Subject: [PATCH] [DependencyInjection] Support for parameter injection --- .../Compiler/AutowirePass.php | 9 ++++++++ .../Tests/Compiler/AutowirePassTest.php | 21 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php b/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php index d1b1fd292cf06..097ea379e0c91 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php @@ -24,6 +24,9 @@ */ class AutowirePass implements CompilerPassInterface { + /** + * @var ContainerBuilder + */ private $container; private $reflectionClasses = array(); private $definedTypes = array(); @@ -40,6 +43,7 @@ public function process(ContainerBuilder $container) try { $this->container = $container; + foreach ($container->getDefinitions() as $id => $definition) { if ($definition->isAutowired()) { $this->completeDefinition($id, $definition); @@ -107,6 +111,11 @@ private function completeDefinition($id, Definition $definition) continue; } + if ($this->container->hasParameter($parameter->name)) { + $arguments[$index] = $this->container->getParameter($parameter->name); + continue; + } + try { if (!$typeHint = $parameter->getClass()) { // no default value? Then fail diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php index a8b1be355017a..ba64ef3a04a8c 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php @@ -476,6 +476,20 @@ public function testIgnoreServiceWithClassNotExisting() $this->assertTrue($container->hasDefinition('bar')); } + + public function testParameterInjection() + { + $container = new ContainerBuilder(); + $container->setParameter('myParameter', 'SymfonyCon Berlin Hackday!'); + + $parameterInjectionDefinition = $container->register(ParameterInjection::class, ParameterInjection::class); + $parameterInjectionDefinition->setAutowired(true); + + $pass = new AutowirePass(); + $pass->process($container); + + $this->assertEquals('SymfonyCon Berlin Hackday!', $parameterInjectionDefinition->getArgument(1)); + } } class Foo @@ -654,3 +668,10 @@ public function __construct($foo, Bar $bar, $baz) { } } + +class ParameterInjection +{ + public function __construct(Foo $foo, $myParameter) + { + } +} pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy