@@ -591,6 +591,76 @@ application handlers::
591591 }
592592 }
593593
594+ If for some reason you need to exclude one or more services when using a tagged
595+ iterator, add the ``exclude `` option:
596+
597+ .. configuration-block ::
598+
599+ .. code-block :: yaml
600+
601+ # config/services.yaml
602+ services :
603+ # ...
604+
605+ # This is the service we want to exclude, even if the 'app.handler' tag is attached
606+ App\Handler\Three :
607+ tags : ['app.handler']
608+
609+ App\HandlerCollection :
610+ arguments :
611+ - !tagged_iterator { tag: app.handler, exclude: ['App\Handler\Three'] }
612+
613+ .. code-block :: xml
614+
615+ <!-- config/services.xml -->
616+ <?xml version =" 1.0" encoding =" UTF-8" ?>
617+ <container xmlns =" http://symfony.com/schema/dic/services"
618+ xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
619+ xsi : schemaLocation =" http://symfony.com/schema/dic/services
620+ https://symfony.com/schema/dic/services/services-1.0.xsd" >
621+
622+ <services >
623+ <!-- ... -->
624+
625+ <!-- This is the service we want to exclude, even if the 'app.handler' tag is attached -->
626+ <service id =" App\Handler\Three" >
627+ <tag name =" app.handler" />
628+ </service >
629+
630+ <service id =" App\HandlerCollection" >
631+ <!-- inject all services tagged with app.handler as first argument -->
632+ <argument type =" tagged_iterator" tag =" app.handler" >
633+ <exclude >App\Handler\Three</exclude >
634+ </argument >
635+ </service >
636+ </services >
637+ </container >
638+
639+ .. code-block :: php
640+
641+ // config/services.php
642+ namespace Symfony\Component\DependencyInjection\Loader\Configurator;
643+
644+ return function(ContainerConfigurator $configurator) {
645+ $services = $configurator->services();
646+
647+ // ...
648+
649+ // This is the service we want to exclude, even if the 'app.handler' tag is attached
650+ $services->set(App\Handler\Three::class)
651+ ->tag('app.handler')
652+ ;
653+
654+ $services->set(App\HandlerCollection::class)
655+ // inject all services tagged with app.handler as first argument
656+ ->args([tagged_iterator('app.handler', exclude: [App\Handler\Three::class])])
657+ ;
658+ };
659+
660+ .. versionadded :: 6.1
661+
662+ The ``exclude `` option was introduced in Symfony 6.1.
663+
594664.. seealso ::
595665
596666 See also :doc: `tagged locator services </service_container/service_subscribers_locators >`
0 commit comments