@@ -208,6 +208,7 @@ subsystem isn't able to find itself the interface implementation to register:
208
208
209
209
<services >
210
210
<service id =" rot13_transformer" class =" Acme\Rot13Transformer" />
211
+
211
212
<service id =" twitter_client" class =" Acme\TwitterClient" autowire =" true" />
212
213
</services >
213
214
</container >
@@ -217,12 +218,11 @@ subsystem isn't able to find itself the interface implementation to register:
217
218
use Symfony\Component\DependencyInjection\Definition;
218
219
219
220
// ...
220
- $definition1 = new Definition('Acme\Rot13Transformer');
221
- $container->setDefinition('rot13_transformer', $definition1);
221
+ $container->register('rot13_transformer', 'Acme\Rot13Transformer');
222
222
223
- $definition2 = new Definition('Acme\TwitterClient');
224
- $definition2 ->setAutowired(true);
225
- $container->setDefinition('twitter_client', $definition2 );
223
+ $clientDefinition = new Definition('Acme\TwitterClient');
224
+ $clientDefinition ->setAutowired(true);
225
+ $container->setDefinition('twitter_client', $clientDefinition );
226
226
227
227
The autowiring subsystem detects that the ``rot13_transformer `` service implements
228
228
the ``TransformerInterface `` and injects it automatically. Even when using
@@ -238,7 +238,7 @@ returning the result of the ROT13 transformation uppercased::
238
238
239
239
namespace Acme;
240
240
241
- class UppercaseRot13Transformer implements TransformerInterface
241
+ class UppercaseTransformer implements TransformerInterface
242
242
{
243
243
private $transformer;
244
244
@@ -255,7 +255,7 @@ returning the result of the ROT13 transformation uppercased::
255
255
256
256
This class is intended to decorate any transformer and return its value uppercased.
257
257
258
- We can now refactor the controller to add another endpoint leveraging this new
258
+ The controller can now be refactored to add a new endpoint using this uppercase
259
259
transformer::
260
260
261
261
namespace Acme\Controller;
@@ -319,13 +319,13 @@ and a Twitter client using it:
319
319
class : Acme\TwitterClient
320
320
autowire : true
321
321
322
- uppercase_rot13_transformer :
323
- class : Acme\UppercaseRot13Transformer
322
+ uppercase_transformer :
323
+ class : Acme\UppercaseTransformer
324
324
autowire : true
325
325
326
326
uppercase_twitter_client :
327
327
class : Acme\TwitterClient
328
- arguments : ['@uppercase_rot13_transformer ']
328
+ arguments : ['@uppercase_transformer ']
329
329
330
330
.. code-block :: xml
331
331
@@ -338,10 +338,15 @@ and a Twitter client using it:
338
338
<service id =" rot13_transformer" class =" Acme\Rot13Transformer" >
339
339
<autowiring-type >Acme\TransformerInterface</autowiring-type >
340
340
</service >
341
+
341
342
<service id =" twitter_client" class =" Acme\TwitterClient" autowire =" true" />
342
- <service id =" uppercase_rot13_transformer" class =" Acme\UppercaseRot13Transformer" autowire =" true" />
343
+
344
+ <service id =" uppercase_transformer" class =" Acme\UppercaseTransformer"
345
+ autowire =" true"
346
+ />
347
+
343
348
<service id =" uppercase_twitter_client" class =" Acme\TwitterClient" >
344
- <argument type =" service" id =" uppercase_rot13_transformer " />
349
+ <argument type =" service" id =" uppercase_transformer " />
345
350
</service >
346
351
</services >
347
352
</container >
@@ -352,21 +357,22 @@ and a Twitter client using it:
352
357
use Symfony\Component\DependencyInjection\Definition;
353
358
354
359
// ...
355
- $definition1 = new Definition('Acme\Rot13Transformer');
356
- $definition1 ->setAutowiringTypes(array('Acme\TransformerInterface'));
357
- $container->setDefinition('rot13_transformer', $definition1 );
360
+ $rot13Definition = new Definition('Acme\Rot13Transformer');
361
+ $rot13Definition ->setAutowiringTypes(array('Acme\TransformerInterface'));
362
+ $container->setDefinition('rot13_transformer', $rot13Definition );
358
363
359
- $definition2 = new Definition('Acme\TwitterClient');
360
- $definition2 ->setAutowired(true);
361
- $container->setDefinition('twitter_client', $definition2 );
364
+ $clientDefinition = new Definition('Acme\TwitterClient');
365
+ $clientDefinition ->setAutowired(true);
366
+ $container->setDefinition('twitter_client', $clientDefinition );
362
367
363
- $definition3 = new Definition('Acme\UppercaseRot13Transformer ');
364
- $definition3 ->setAutowired(true);
365
- $container->setDefinition('uppercase_rot13_transformer ', $definition3 );
368
+ $uppercaseDefinition = new Definition('Acme\UppercaseTransformer ');
369
+ $uppercaseDefinition ->setAutowired(true);
370
+ $container->setDefinition('uppercase_transformer ', $uppercaseDefinition );
366
371
367
- $definition4 = new Definition('Acme\TwitterClient');
368
- $definition4->addArgument(new Reference('uppercase_rot13_transformer'));
369
- $container->setDefinition('uppercase_twitter_client', $definition4);
372
+ $uppercaseClientDefinition = new Definition('Acme\TwitterClient', array(
373
+ new Reference('uppercase_transformer'),
374
+ ));
375
+ $container->setDefinition('uppercase_twitter_client', $uppercaseClientDefinition);
370
376
371
377
This deserves some explanations. You now have two services implementing the
372
378
``TransformerInterface ``. The autowiring subsystem cannot guess which one
@@ -381,9 +387,9 @@ Fortunately, the ``autowiring_types`` key is here to specify which implementatio
381
387
to use by default. This key can take a list of types if necessary.
382
388
383
389
Thanks to this setting, the ``rot13_transformer `` service is automatically injected
384
- as an argument of the ``uppercase_rot13_transformer `` and ``twitter_client `` services. For
385
- the ``uppercase_twitter_client ``, we use a standard service definition to inject
386
- the specific ``uppercase_rot13_transformer `` service.
390
+ as an argument of the ``uppercase_transformer `` and ``twitter_client `` services. For
391
+ the ``uppercase_twitter_client ``, a standard service definition is used to
392
+ inject the specific ``uppercase_transformer `` service.
387
393
388
394
As for other RAD features such as the FrameworkBundle controller or annotations,
389
395
keep in mind to not use autowiring in public bundles nor in large projects with
0 commit comments