8000 [DependencyInjection] Add the new 'autowire' syntax. · symfony/symfony@585616d · GitHub
[go: up one dir, main page]

Skip to content

Commit 585616d

Browse files
committed
[DependencyInjection] Add the new 'autowire' syntax.
1 parent 7806487 commit 585616d

File tree

12 files changed

+97
-28
lines changed

12 files changed

+97
-28
lines changed

src/Symfony/Component/DependencyInjection/Compiler/AutowiringPass.php renamed to src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,8 @@
2121
*
2222
* @author Kévin Dunglas <dunglas@gmail.com>
2323
*/
24-
class AutowiringPass implements CompilerPassInterface
24+
class AutowirePass implements CompilerPassInterface
2525
{
26-
const AUTOWIRING = 'autowiring';
27-
2826
private $container;
2927
private $reflectionClasses = array();
3028
private $definedTypes = array();
@@ -38,7 +36,7 @@ public function process(ContainerBuilder $container)
3836
{
3937
$this->container = $container;
4038
foreach ($container->getDefinitions() as $id => $definition) {
41-
if ($definition->hasTag(self::AUTOWIRING)) {
39+
if ($definition->isAutowired()) {
4240
$this->completeDefinition($id, $definition);
4341
}
4442
}
@@ -64,6 +62,7 @@ private function completeDefinition($id, Definition $definition)
6462
if (!($reflectionClass = $this->getReflectionClass($id, $definition))) {
6563
return;
6664
}
65+
$this->container->addClassResource($reflectionClass);
6766

6867
if (!($constructor = $reflectionClass->getConstructor())) {
6968
return;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public function __construct()
5050
new CheckDefinitionValidityPass(),
5151
new ResolveReferencesToAliasesPass(),
5252
new ResolveInvalidReferencesPass(),
53-
new AutowiringPass(),
53+
new AutowirePass(),
5454
new AnalyzeServiceReferencesPass(true),
5555
new CheckCircularReferencesPass(),
5656
new CheckReferenceValidityPass(),

src/Symfony/Component/DependencyInjection/Definition.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class Definition
4141
private $synchronized = false;
4242
private $lazy = false;
4343
private $decoratedService;
44+
private $autowired = false;
4445
private $autowiringTypes = array();
4546

4647
protected $arguments;
@@ -838,6 +839,30 @@ public function setTypes(array $types)
838839
return $this;
839840
}
840841

842+
/**
843+
* Is the definition autowired?
844+
*
845+
* @return bool
846+
*/
847+
public function isAutowired()
848+
{
849+
return $this->autowired;
850+
}
851+
852+
/**
853+
* Sets autowired.
854+
*
855+
* @param $autowired
856+
*
857+
* @return Definition The current instance
858+
*/
859+
public function setAutowired($autowired)
860+
{
861+
$this->autowired = $autowired;
862+
863+
return $this;
864+
}
865+
841866
/**
842867
* Gets autowiring types that will default to this definition.
843868
*

src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,10 @@ private function parseDefinition(\DOMElement $service, $file)
157157
}
158158
}
159159

160+
if ($value = $service->getAttribute('autowire')) {
161+
$definition->setAutowired(XmlUtils::phpize($value));
162+
}
163+
160164
if ($value = $service->getAttribute('scope')) {
161165
$triggerDeprecation = 'request' !== (string) $service->getAttribute('id');
162166

src/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,10 @@ private function parseDefinition($id, $service, $file)
299299
$definition->setDecoratedService($service['decorates'], $renameId, $priority);
300300
}
301301

302+
if (isset($service['autowire'])) {
303+
$definition->setAutowired($service['autowire']);
304+
}
305+
302306
if (isset($service['autowiring_types'])) {
303307
if (!is_array($service['autowiring_types'])) {
304308
throw new InvalidArgumentException(sprintf('Parameter "autowiring_types" must be an array for service "%s" in %s. Check your YAML syntax.', $id, $file));

src/Symfony/Component/DependencyInjection/Loader/schema/dic/services/services-1.0.xsd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@
104104
<xsd:attribute name="decorates" type="xsd:string" />
105105
<xsd:attribute name="decoration-inner-name" type="xsd:string" />
106106
<xsd:attribute name="decoration-priority" type="xsd:integer" />
107+
<xsd:attribute name="autowire" type="boolean" />
107108
</xsd:complexType>
108109

109110
<xsd:complexType name="tag">

src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowiringPassTest.php renamed to src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowirePassTest.php

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,24 @@
1111

1212
namespace Symfony\Component\DependencyInjection\Tests\Compiler;
1313

14-
use Symfony\Component\DependencyInjection\Compiler\AutowiringPass;
14+
use Symfony\Component\DependencyInjection\Compiler\AutowirePass;
1515
use Symfony\Component\DependencyInjection\ContainerBuilder;
1616
use Symfony\Component\DependencyInjection\Reference;
1717

1818
/**
1919
* @author Kévin Dunglas <dunglas@gmail.com>
2020
*/
21-
class AutowiringPassTest extends \PHPUnit_Framework_TestCase
21+
class AutowirePassTest extends \PHPUnit_Framework_TestCase
2222
{
2323
public function testProcess()
2424
{
2525
$container = new ContainerBuilder();
2626

2727
$container->register('foo', __NAMESPACE__.'\Foo');
2828
$barDefinition = $container->register('bar', __NAMESPACE__.'\Bar');
29-
$barDefinition->addTag(AutowiringPass::AUTOWIRING);
29+
$barDefinition->setAutowired(true);
3030

31-
$pass = new AutowiringPass();
31+
$pass = new AutowirePass();
3232
$pass->process($container);
3333

3434
$this->assertCount(1, $container->getDefinition('bar')->getArguments());
@@ -41,9 +41,9 @@ public function testProcessAutowireParent()
4141

4242
$container->register('b', __NAMESPACE__.'\B');
4343
$cDefinition = $container->register('c', __NAMESPACE__.'\C');
44-
$cDefinition->addTag(AutowiringPass::AUTOWIRING);
44+
$cDefinition->setAutowired(true);
4545

46-
$pass = new AutowiringPass();
46+
$pass = new AutowirePass();
4747
$pass->process($container);
4848

4949
$this->assertCount(1, $container->getDefinition('c')->getArguments());
@@ -56,9 +56,9 @@ public function testProcessAutowireInterface()
5656

5757
$container->register('f', __NAMESPACE__.'\F');
5858
$gDefinition = $container->register('g', __NAMESPACE__.'\G');
59-
$gDefinition->addTag(AutowiringPass::AUTOWIRING);
59+
$gDefinition->setAutowired(true);
6060

61-
$pass = new AutowiringPass();
61+
$pass = new AutowirePass();
6262
$pass->process($container);
6363

6464
$this->assertCount(2, $container->getDefinition('g')->getArguments());
@@ -73,9 +73,9 @@ public function testCompleteExistingDefinition()
7373
$container->register('b', __NAMESPACE__.'\B');
7474
$container->register('f', __NAMESPACE__.'\F');
7575
$hDefinition = $container->register('h', __NAMESPACE__.'\H')->addArgument(new Reference('b'));
76-
$hDefinition->addTag(AutowiringPass::AUTOWIRING);
76+
$hDefinition->setAutowired(true);
7777

78-
$pass = new AutowiringPass();
78+
$pass = new AutowirePass();
7979
$pass->process($container);
8080

8181
$this->assertCount(2, $container->getDefinition('h')->getArguments());
@@ -90,9 +90,9 @@ public function testCompleteExistingDefinitionWithNotDefinedArguments()
9090
$container->register('b', __NAMESPACE__.'\B');
9191
$container->register('f', __NAMESPACE__.'\F');
9292
$hDefinition = $container->register('h', __NAMESPACE__.'\H')->addArgument('')->addArgument('');
93-
$hDefinition->addTag(AutowiringPass::AUTOWIRING);
93+
$hDefinition->setAutowired(true);
9494

95-
$pass = new AutowiringPass();
95+
$pass = new AutowirePass();
9696
$pass->process($container);
9797

9898
$this->assertCount(2, $container->getDefinition('h')->getArguments());
@@ -111,9 +111,9 @@ public function testTypeCollision()
111111
$container->register('c1', __NAMESPACE__.'\CollisionA');
112112
$container->register('c2', __NAMESPACE__.'\CollisionB');
113113
$aDefinition = $container->register('a', __NAMESPACE__.'\CannotBeAutowired');
114-
$aDefinition->addTag(AutowiringPass::AUTOWIRING);
114+
$aDefinition->setAutowired(true);
115115

116-
$pass = new AutowiringPass();
116+
$pass = new AutowirePass();
117117
$pass->process($container);
118118
}
119119

@@ -124,9 +124,9 @@ public function testWithTypeSet()
124124
$container->register('c1', __NAMESPACE__.'\CollisionA');
125125
$container->register('c2', __NAMESPACE__.'\CollisionB')->addAutowiringType(__NAMESPACE__.'\CollisionInterface');
126126
$aDefinition = $container->register('a', __NAMESPACE__.'\CannotBeAutowired');
127-
$aDefinition->addTag(AutowiringPass::AUTOWIRING);
127+
$aDefinition->setAutowired(true);
128128

129-
$pass = new AutowiringPass();
129+
$pass = new AutowirePass();
130130
$pass->process($container);
131131

132132
$this->assertCount(1, $container->getDefinition('a')->getArguments());
@@ -138,9 +138,9 @@ public function testCreateDefinition()
138138
$container = new ContainerBuilder();
139139

140140
$coopTilleulsDefinition = $container->register('coop_tilleuls', __NAMESPACE__.'\LesTilleuls');
141-
$coopTilleulsDefinition->addTag(AutowiringPass::AUTOWIRING);
141+
$coopTilleulsDefinition->setAutowired(true);
142142

143-
$pass = new AutowiringPass();
143+
$pass = new AutowirePass();
144144
$pass->process($container);
145145

146146
$this->assertCount(1, $container->getDefinition('coop_tilleuls')->getArguments());
@@ -163,9 +163,9 @@ public function testResolveParameter()
163163
$container->setParameter('class_name', __NAMESPACE__.'\Foo');
164164
$container->register('foo', '%class_name%');
165165
$barDefinition = $container->register('bar', __NAMESPACE__.'\Bar');
166-
$barDefinition->addTag(AutowiringPass::AUTOWIRING);
166+
$barDefinition->setAutowired(true);
167167

168-
$pass = new AutowiringPass();
168+
$pass = new AutowirePass();
169169
$pass->process($container);
170170

171171
$this->assertEquals('foo', $container->getDefinition('bar')->getArgument(0));
@@ -178,9 +178,9 @@ public function testOptionalParameter()
178178
$container->register('a', __NAMESPACE__.'\A');
179179
$container->register('foo', __NAMESPACE__.'\Foo');
180180
$optDefinition = $container->register('opt', __NAMESPACE__.'\OptionalParameter');
181-
$optDefinition->addTag(AutowiringPass::AUTOWIRING);
181+
$optDefinition->setAutowired(true);
182182

183-
$pass = new AutowiringPass();
183+
$pass = new AutowirePass();
184184
$pass->process($container);
185185

186186
$definition = $container->getDefinition('opt');
@@ -196,7 +196,7 @@ public function testDontTriggeruAutowiring()
196196
$container->register('foo', __NAMESPACE__.'\Foo');
197197
$container->register('bar', __NAMESPACE__.'\Bar');
198198

199-
$pass = new AutowiringPass();
199+
$pass = new AutowirePass();
200200
$pass->process($container);
201201

202202
$this->assertCount(0, $container->getDefinition('bar')->getArguments());

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,14 @@ public function testSetProperty()
395395
$this->assertEquals(array('foo' => 'bar'), $def->getProperties());
396396
}
397397

398+
public function testAutowired()
399+
{
400+
$def = new Definition('stdClass');
401+
$this->assertFalse($def->isAutowired());
402+
$def->setAutowired(true);
403+
$this->assertTrue($def->isAutowired());
404+
}
405+
398406
public function testTypes()
399407
{
400408
$def = new Definition('stdClass');
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
3+
<services>
4+
<service id="bar" class="Bar" autowire="true" />
5+
</services>
6+
</container>
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
services:
2+
bar_service:
3+
class: BarClass
4+
autowire: true

0 commit comments

Comments
 (0)
0