@@ -919,109 +919,110 @@ array element. For example, to retrieve the ``handler_two`` handler::
919
919
}
920
920
}
921
921
922
- .. tip ::
922
+ You can omit the index attribute (``key `` in the previous example) by setting
923
+ the ``index_by `` attribute on the ``tagged_iterator `` tag. In this case, you
924
+ must define a static method whose name follows the pattern:
925
+ ``getDefault<CamelCase index_by value>Name ``.
923
926
924
- Just like the priority, if you set the attribute (``index_by ``) on the :tagged_iterator, you can also implement a static
925
- ``getDefault(``index_by ``)Name()`` method in the handlers and omit the
926
- index attribute (``key ``)::
927
-
927
+ For example, if ``index_by `` is ``handler ``, the method name must be
928
+ ``getDefaultHandlerName() ``:
928
929
929
- .. code-block:: yaml
930
-
931
- # config/services.yaml
932
- services:
933
- # ...
930
+ .. code-block :: yaml
934
931
935
- App\HandlerCollection:
936
- arguments: [!tagged_iterator { tag: 'app.handler', index_by: 'handler' }]
937
-
938
- .. code-block :: php
932
+ # config/services.yaml
933
+ services :
934
+ # ...
935
+
936
+ App\HandlerCollection :
937
+ arguments : [!tagged_iterator { tag: 'app.handler', index_by: 'handler' }]
939
938
940
- // src/Handler/One.php
941
- namespace App\Handler;
939
+ .. code-block :: php
942
940
943
- class One
941
+ // src/Handler/One.php
942
+ namespace App\Handler;
943
+
944
+ class One
945
+ {
946
+ // ...
947
+ public static function getDefaultHandlerName(): string
944
948
{
945
- // ...
946
- public static function getDefaultHandlerName(): string
947
- {
948
- return 'handler_one';
949
- }
949
+ return 'handler_one';
950
950
}
951
+ }
951
952
952
- You also can define the name of the static method to implement on each service
953
- with the ``default_index_method `` attribute on the tagged argument:
953
+ You also can define the name of the static method to implement on each service
954
+ with the ``default_index_method `` attribute on the tagged argument:
954
955
955
- .. configuration-block ::
956
+ .. configuration-block ::
956
957
957
- .. code-block :: php-attributes
958
+ .. code-block :: php-attributes
958
959
959
- // src/HandlerCollection.php
960
- namespace App;
960
+ // src/HandlerCollection.php
961
+ namespace App;
961
962
962
- use Symfony\Component\DependencyInjection\Attribute\TaggedIterator;
963
+ use Symfony\Component\DependencyInjection\Attribute\TaggedIterator;
963
964
964
- class HandlerCollection
965
- {
966
- public function __construct(
967
- #[TaggedIterator('app.handler', defaultIndexMethod: 'getIndex')]
968
- iterable $handlers
969
- ) {
970
- }
965
+ class HandlerCollection
966
+ {
967
+ public function __construct(
968
+ #[TaggedIterator('app.handler', defaultIndexMethod: 'getIndex')]
969
+ iterable $handlers
970
+ ) {
971
971
}
972
+ }
972
973
973
- .. code-block :: yaml
974
+ .. code-block :: yaml
974
975
975
- # config/services.yaml
976
- services :
977
- # ...
976
+ # config/services.yaml
977
+ services :
978
+ # ...
978
979
979
- App\HandlerCollection :
980
- # use getIndex() instead of getDefaultIndexName()
981
- arguments : [!tagged_iterator { tag: 'app.handler', default_index_method: 'getIndex' }]
980
+ App\HandlerCollection :
981
+ # use getIndex() instead of getDefaultIndexName()
982
+ arguments : [!tagged_iterator { tag: 'app.handler', default_index_method: 'getIndex' }]
982
983
983
- .. code-block :: xml
984
+ .. code-block :: xml
984
985
985
- <!-- config/services.xml -->
986
- <?xml version =" 1.0" encoding =" UTF-8" ?>
987
- <container xmlns =" http://symfony.com/schema/dic/services"
988
- xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
989
- xsi : schemaLocation =" http://symfony.com/schema/dic/services
990
- https://symfony.com/schema/dic/services/services-1.0.xsd" >
986
+ <!-- config/services.xml -->
987
+ <?xml version =" 1.0" encoding =" UTF-8" ?>
988
+ <container xmlns =" http://symfony.com/schema/dic/services"
989
+ xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
990
+ xsi : schemaLocation =" http://symfony.com/schema/dic/services
991
+ https://symfony.com/schema/dic/services/services-1.0.xsd" >
991
992
992
- <services >
993
- <!-- ... -->
993
+ <services >
994
+ <!-- ... -->
994
995
995
- <service id =" App\HandlerCollection" >
996
- <!-- use getIndex() instead of getDefaultIndexName() -->
997
- <argument type =" tagged_iterator"
998
- tag =" app.handler"
999
- default-index-method =" someFunctionName"
1000
- />
1001
- </service >
1002
- </services >
1003
- </container >
996
+ <service id =" App\HandlerCollection" >
997
+ <!-- use getIndex() instead of getDefaultIndexName() -->
998
+ <argument type =" tagged_iterator"
999
+ tag =" app.handler"
1000
+ default-index-method =" someFunctionName"
1001
+ />
1002
+ </service >
1003
+ </services >
1004
+ </container >
1004
1005
1005
- .. code-block :: php
1006
+ .. code-block :: php
1006
1007
1007
- // config/services.php
1008
- namespace Symfony\Component\DependencyInjection\Loader\Configurator;
1008
+ // config/services.php
1009
+ namespace Symfony\Component\DependencyInjection\Loader\Configurator;
1009
1010
1010
- use App\HandlerCollection;
1011
- use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument;
1011
+ use App\HandlerCollection;
1012
+ use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument;
1012
1013
1013
- return function (ContainerConfigurator $container) {
1014
- $services = $container->services();
1014
+ return function (ContainerConfigurator $container) {
1015
+ $services = $container->services();
1015
1016
1016
- // ...
1017
+ // ...
1017
1018
1018
- // use getIndex() instead of getDefaultIndexName()
1019
- $services->set(HandlerCollection::class)
1020
- ->args([
1021
- tagged_iterator('app.handler', null, 'getIndex'),
1022
- ])
1023
- ;
1024
- };
1019
+ // use getIndex() instead of getDefaultIndexName()
1020
+ $services->set(HandlerCollection::class)
1021
+ ->args([
1022
+ tagged_iterator('app.handler', null, 'getIndex'),
1023
+ ])
1024
+ ;
1025
+ };
1025
1026
1026
1027
.. _tags_as-tagged-item :
1027
1028
0 commit comments