16
16
use Symfony \Component \DependencyInjection \Alias ;
17
17
use Symfony \Component \DependencyInjection \Argument \ServiceLocatorArgument ;
18
18
use Symfony \Component \DependencyInjection \Argument \TaggedIteratorArgument ;
19
+ use Symfony \Component \DependencyInjection \Attribute \TaggedIterator ;
20
+ use Symfony \Component \DependencyInjection \Attribute \TaggedLocator ;
19
21
use Symfony \Component \DependencyInjection \ChildDefinition ;
20
22
use Symfony \Component \DependencyInjection \Compiler \CompilerPassInterface ;
21
23
use Symfony \Component \DependencyInjection \ContainerBuilder ;
@@ -186,6 +188,33 @@ public function testCanDecorateServiceLocator()
186
188
$ this ->assertSame ($ container ->get ('foo ' ), $ container ->get (DecoratedServiceLocator::class)->get ('foo ' ));
187
189
}
188
190
191
+ public function testAliasDecoratedService ()
192
+ {
193
+ $ container = new ContainerBuilder ();
194
+
195
+ $ container ->register ('service ' , ServiceLocator::class)
196
+ ->setPublic (true )
197
+ ->setArguments ([[]])
198
+ ;
199
+ $ container ->register ('decorator ' , DecoratedServiceLocator::class)
200
+ ->setDecoratedService ('service ' )
201
+ ->setAutowired (true )
202
+ ->setPublic (true )
203
+ ;
204
+ $ container ->setAlias (ServiceLocator::class, 'decorator.inner ' )
205
+ ->setPublic (true )
206
+ ;
207
+ $ container ->register ('user_service ' , DecoratedServiceLocator::class)
208
+ ->setAutowired (true )
209
+ ;
210
+
211
+ $ container ->compile ();
212
+
213
+ $ this ->assertInstanceOf (DecoratedServiceLocator::class, $ container ->get ('service ' ));
214
+ $ this ->assertInstanceOf (ServiceLocator::class, $ container ->get (ServiceLocator::class));
215
+ $ this ->assertSame ($ container ->get ('service ' ), $ container ->get ('decorator ' ));
216
+ }
217
+
189
218
/**
190
219
* @dataProvider getYamlCompileTests
191
220
*/
@@ -339,6 +368,10 @@ public function testTaggedServiceWithIndexAttributeAndDefaultMethod()
339
368
public function testTaggedServiceWithIndexAttributeAndDefaultMethodConfiguredViaAttribute ()
340
369
{
341
370
$ container = new ContainerBuilder ();
371
+ $ container ->registerAttributeForAutoconfiguration (TaggedIterator::class, static function (ChildDefinition $ definition , TaggedIterator $ attribute , \ReflectionParameter $ reflector ) {
372
+ $ definition ->setArgument ($ reflector ->getPosition (), new TaggedIteratorArgument ($ attribute ->tag , $ attribute ->indexAttribute , $ attribute ->defaultIndexMethod , false , $ attribute ->defaultPriorityMethod ));
373
+ });
374
+
342
375
$ container ->register (BarTagClass::class)
343
376
->setPublic (true )
344
377
->addTag ('foo_bar ' , ['foo ' => 'bar_tab_class_with_defaultmethod ' ])
@@ -349,6 +382,7 @@ public function testTaggedServiceWithIndexAttributeAndDefaultMethodConfiguredVia
349
382
;
350
383
$ container ->register (IteratorConsumer::class)
351
384
->setAutowired (true )
385
+ ->setAutoconfigured (true )
352
386
->setPublic (true )
353
387
;
354
388
@@ -366,6 +400,10 @@ public function testTaggedServiceWithIndexAttributeAndDefaultMethodConfiguredVia
366
400
public function testTaggedIteratorWithDefaultIndexMethodConfiguredViaAttribute ()
367
401
{
368
402
$ container = new ContainerBuilder ();
403
+ $ container ->registerAttributeForAutoconfiguration (TaggedIterator::class, static function (ChildDefinition $ definition , TaggedIterator $ attribute , \ReflectionParameter $ reflector ) {
404
+ $ definition ->setArgument ($ reflector ->getPosition (), new TaggedIteratorArgument ($ attribute ->tag , $ attribute ->indexAttribute , $ attribute ->defaultIndexMethod , false , $ attribute ->defaultPriorityMethod ));
405
+ });
406
+
369
407
$ container ->register (BarTagClass::class)
370
408
->setPublic (true )
371
409
->addTag ('foo_bar ' )
@@ -376,6 +414,7 @@ public function testTaggedIteratorWithDefaultIndexMethodConfiguredViaAttribute()
376
414
;
377
415
$ container ->register (IteratorConsumerWithDefaultIndexMethod::class)
378
416
->setAutowired (true )
417
+ ->setAutoconfigured (true )
379
418
->setPublic (true )
380
419
;
381
420
@@ -393,6 +432,10 @@ public function testTaggedIteratorWithDefaultIndexMethodConfiguredViaAttribute()
393
432
public function testTaggedIteratorWithDefaultPriorityMethodConfiguredViaAttribute ()
394
433
{
395
434
$ container = new ContainerBuilder ();
435
+ $ container ->registerAttributeForAutoconfiguration (TaggedIterator::class, static function (ChildDefinition $ definition , TaggedIterator $ attribute , \ReflectionParameter $ reflector ) {
436
+ $ definition ->setArgument ($ reflector ->getPosition (), new TaggedIteratorArgument ($ attribute ->tag , $ attribute ->indexAttribute , $ attribute ->defaultIndexMethod , false , $ attribute ->defaultPriorityMethod ));
437
+ });
438
+
396
439
$ container ->register (BarTagClass::class)
397
440
->setPublic (true )
398
441
->addTag ('foo_bar ' )
@@ -403,6 +446,7 @@ public function testTaggedIteratorWithDefaultPriorityMethodConfiguredViaAttribut
403
446
;
404
447
$ container ->register (IteratorConsumerWithDefaultPriorityMethod::class)
405
448
->setAutowired (true )
449
+ ->setAutoconfigured (true )
406
450
->setPublic (true )
407
451
;
408
452
@@ -420,6 +464,10 @@ public function testTaggedIteratorWithDefaultPriorityMethodConfiguredViaAttribut
420
464
public function testTaggedIteratorWithDefaultIndexMethodAndWithDefaultPriorityMethodConfiguredViaAttribute ()
421
465
{
422
466
$ container = new ContainerBuilder ();
467
+ $ container ->registerAttributeForAutoconfiguration (TaggedIterator::class, static function (ChildDefinition $ definition , TaggedIterator $ attribute , \ReflectionParameter $ reflector ) {
468
+ $ definition ->setArgument ($ reflector ->getPosition (), new TaggedIteratorArgument ($ attribute ->tag , $ attribute ->indexAttribute , $ attribute ->defaultIndexMethod , false , $ attribute ->defaultPriorityMethod ));
469
+ });
470
+
423
471
$ container ->register (BarTagClass::class)
424
472
->setPublic (true )
425
473
->addTag ('foo_bar ' )
@@ -430,6 +478,7 @@ public function testTaggedIteratorWithDefaultIndexMethodAndWithDefaultPriorityMe
430
478
;
431
479
$ container ->register (IteratorConsumerWithDefaultIndexMethodAndWithDefaultPriorityMethod::class)
432
480
->setAutowired (true )
481
+ ->setAutoconfigured (true )
433
482
->setPublic (true )
434
483
;
435
484
@@ -447,6 +496,10 @@ public function testTaggedIteratorWithDefaultIndexMethodAndWithDefaultPriorityMe
447
496
public function testTaggedLocatorConfiguredViaAttribute ()
448
497
{
449
498
$ container = new ContainerBuilder ();
499
+ $ container ->registerAttributeForAutoconfiguration (TaggedLocator::class, static function (ChildDefinition $ definition , TaggedLocator $ attribute , \ReflectionParameter $ reflector ) {
500
+ $ definition ->setArgument ($ reflector ->getPosition (), new ServiceLocatorArgument (new TaggedIteratorArgument ($ attribute ->tag , $ attribute ->indexAttribute , $ attribute ->defaultIndexMethod , true , $ attribute ->defaultPriorityMethod )));
501
+ });
502
+
450
503
$ container ->register (BarTagClass::class)
451
504
->setPublic (true )
452
505
->addTag ('foo_bar ' , ['foo ' => 'bar_tab_class_with_defaultmethod ' ])
@@ -457,6 +510,7 @@ public function testTaggedLocatorConfiguredViaAttribute()
457
510
;
458
511
$ container ->register (LocatorConsumer::class)
459
512
->setAutowired (true )
513
+ ->setAutoconfigured (true )
460
514
->setPublic (true )
461
515
;
462
516
@@ -476,6 +530,10 @@ public function testTaggedLocatorConfiguredViaAttribute()
476
530
public function testTaggedLocatorConfiguredViaAttributeWithoutIndex ()
477
531
{
478
532
$ container = new ContainerBuilder ();
533
+ $ container ->registerAttributeForAutoconfiguration (TaggedLocator::class, static function (ChildDefinition $ definition , TaggedLocator $ attribute , \ReflectionParameter $ reflector ) {
534
+ $ definition ->setArgument ($ reflector ->getPosition (), new ServiceLocatorArgument (new TaggedIteratorArgument ($ attribute ->tag , $ attribute ->indexAttribute , $ attribute ->defaultIndexMethod , true , $ attribute ->defaultPriorityMethod )));
535
+ });
536
+
479
537
$ container ->register (BarTagClass::class)
480
538
->setPublic (true )
481
539
->addTag ('foo_bar ' )
@@ -486,6 +544,7 @@ public function testTaggedLocatorConfiguredViaAttributeWithoutIndex()
486
544
;
487
545
$ container ->register (LocatorConsumerWithoutIndex::class)
488
546
->setAutowired (true )
547
+ ->setAutoconfigured (true )
489
548
->setPublic (true )
490
549
;
491
550
@@ -505,6 +564,10 @@ public function testTaggedLocatorConfiguredViaAttributeWithoutIndex()
505
564
public function testTaggedLocatorWithDefaultIndexMethodConfiguredViaAttribute ()
506
565
{
507
566
$ container = new ContainerBuilder ();
567
+ $ container ->registerAttributeForAutoconfiguration (TaggedLocator::class, static function (ChildDefinition $ definition , TaggedLocator $ attribute , \ReflectionParameter $ reflector ) {
568
+ $ definition ->setArgument ($ reflector ->getPosition (), new ServiceLocatorArgument (new TaggedIteratorArgument ($ attribute ->tag , $ attribute ->indexAttribute , $ attribute ->defaultIndexMethod , true , $ attribute ->defaultPriorityMethod )));
569
+ });
570
+
508
571
$ container ->register (BarTagClass::class)
509
572
->setPublic (true )
510
573
->addTag ('foo_bar ' )
@@ -515,6 +578,7 @@ public function testTaggedLocatorWithDefaultIndexMethodConfiguredViaAttribute()
515
578
;
516
579
$ container ->register (LocatorConsumerWithDefaultIndexMethod::class)
517
580
->setAutowired (true )
581
+ ->setAutoconfigured (true )
518
582
->setPublic (true )
519
583
;
520
584
@@ -534,6 +598,10 @@ public function testTaggedLocatorWithDefaultIndexMethodConfiguredViaAttribute()
534
598
public function testTaggedLocatorWithDefaultPriorityMethodConfiguredViaAttribute ()
535
599
{
536
600
$ container = new ContainerBuilder ();
601
+ $ container ->registerAttributeForAutoconfiguration (TaggedLocator::class, static function (ChildDefinition $ definition , TaggedLocator $ attribute , \ReflectionParameter $ reflector ) {
602
+ $ definition ->setArgument ($ reflector ->getPosition (), new ServiceLocatorArgument (new TaggedIteratorArgument ($ attribute ->tag , $ attribute ->indexAttribute , $ attribute ->defaultIndexMethod , true , $ attribute ->defaultPriorityMethod )));
603
+ });
604
+
537
605
$ container ->register (BarTagClass::class)
538
606
->setPublic (true )
539
607
->addTag ('foo_bar ' )
@@ -544,6 +612,7 @@ public function testTaggedLocatorWithDefaultPriorityMethodConfiguredViaAttribute
544
612
;
545
613
$ container ->register (LocatorConsumerWithDefaultPriorityMethod::class)
546
614
->setAutowired (true )
615
+ ->setAutoconfigured (true )
547
616
->setPublic (true )
548
617
;
549
618
@@ -567,6 +636,10 @@ public function testTaggedLocatorWithDefaultPriorityMethodConfiguredViaAttribute
567
636
public function testTaggedLocatorWithDefaultIndexMethodAndWithDefaultPriorityMethodConfiguredViaAttribute ()
568
637
{
569
638
$ container = new ContainerBuilder ();
639
+ $ container ->registerAttributeForAutoconfiguration (TaggedLocator::class, static function (ChildDefinition $ definition , TaggedLocator $ attribute , \ReflectionParameter $ reflector ) {
640
+ $ definition ->setArgument ($ reflector ->getPosition (), new ServiceLocatorArgument (new TaggedIteratorArgument ($ attribute ->tag , $ attribute ->indexAttribute , $ attribute ->defaultIndexMethod , true , $ attribute ->defaultPriorityMethod )));
641
+ });
642
+
570
643
$ container ->register (BarTagClass::class)
571
644
->setPublic (true )
572
645
->addTag ('foo_bar ' )
@@ -577,6 +650,7 @@ public function testTaggedLocatorWithDefaultIndexMethodAndWithDefaultPriorityMet
577
650
;
578
651
$ container ->register (LocatorConsumerWithDefaultIndexMethodAndWithDefaultPriorityMethod::class)
579
652
->setAutowired (true )
653
+ ->setAutoconfigured (true )
580
654
->setPublic (true )
581
655
;
582
656
@@ -602,6 +676,10 @@ public function testTaggedLocatorWithDefaultIndexMethodAndWithDefaultPriorityMet
602
676
public function testNestedDefinitionWithAutoconfiguredConstructorArgument ()
603
677
{
604
678
$ container = new ContainerBuilder ();
679
+ $ container ->registerAttributeForAutoconfiguration (TaggedLocator::class, static function (ChildDefinition $ definition , TaggedLocator $ attribute , \ReflectionParameter $ reflector ) {
680
+ $ definition ->setArgument ($ reflector ->getPosition (), new ServiceLocatorArgument (new TaggedIteratorArgument ($ attribute ->tag , $ attribute ->indexAttribute , $ attribute ->defaultIndexMethod , true , $ attribute ->defaultPriorityMethod )));
681
+ });
682
+
605
683
$ container ->register (FooTagClass::class)
606
684
->setPublic (true )
607
685
->addTag ('foo_bar ' , ['foo ' => 'foo ' ])
@@ -610,7 +688,8 @@ public function testNestedDefinitionWithAutoconfiguredConstructorArgument()
610
688
->setPublic (true )
611
689
->setArguments ([
612
690
(new Definition (LocatorConsumer::class))
613
- ->setAutowired (true ),
691
+ ->setAutowired (true )
692
+ ->setAutoconfigured (true ),
614
693
])
615
694
;
616
695
@@ -629,6 +708,10 @@ public function testNestedDefinitionWithAutoconfiguredConstructorArgument()
629
708
public function testFactoryWithAutoconfiguredArgument ()
630
709
{
631
710
$ container = new ContainerBuilder ();
711
+ $ container ->registerAttributeForAutoconfiguration (TaggedLocator::class, static function (ChildDefinition $ definition , TaggedLocator $ attribute , \ReflectionParameter $ reflector ) {
712
+ $ definition ->setArgument ($ reflector ->getPosition (), new ServiceLocatorArgument (new TaggedIteratorArgument ($ attribute ->tag , $ attribute ->indexAttribute , $ attribute ->defaultIndexMethod , true , $ attribute ->defaultPriorityMethod )));
713
+ });
714
+
632
715
$ container ->register (FooTagClass::class)
633
716
->setPublic (true )
634
717
->addTag ('foo_bar ' , ['key ' => 'my_service ' ])
@@ -637,6 +720,7 @@ public function testFactoryWithAutoconfiguredArgument()
637
720
$ container ->register (LocatorConsumer::class)
638
721
->setPublic (true )
639
722
->setAutowired (true )
723
+ ->setAutoconfigured (true )
640
724
->setFactory (new Reference (LocatorConsumerFactory::class))
641
725
;
642
726
0 commit comments