@@ -562,3 +562,55 @@ application handlers::
562
562
->addTag('app.handler', ['priority' => 20]);
563
563
564
564
Note that any other custom attributes will be ignored by this feature.
565
+
566
+ You can also prioritized services implementing a static method for it.
567
+ The name of the method must be defined on the handler collection service:
568
+
569
+ .. configuration-block ::
570
+
571
+ .. code-block :: yaml
572
+
573
+ # config/services.yaml
574
+ services :
575
+ App\HandlerCollection :
576
+ # inject all services tagged with app.handler and ordered by the result of the getDefaultPriority
577
+ arguments : [!tagged { key: 'app.handler', default_priority_method: 'getDefaultPriority']
578
+
579
+ .. code-block :: xml
580
+
581
+ <!-- config/services.xml -->
582
+ <?xml version =" 1.0" encoding =" UTF-8" ?>
583
+ <container xmlns =" http://symfony.com/schema/dic/services"
584
+ xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
585
+ xsi : schemaLocation =" http://symfony.com/schema/dic/services
586
+ https://symfony.com/schema/dic/services/services-1.0.xsd" >
587
+
588
+ <services >
589
+ <service id =" App\HandlerCollection" >
590
+ <!-- inject all services tagged with app.handler and ordered by the result of the getDefaultPriority-->
591
+ <argument type =" tagged" tag =" app.handler" default-priority-method =" getDefaultPriority" />
592
+ </service >
593
+ </services >
594
+ </container >
595
+
596
+ .. code-block :: php
597
+
598
+ // config/services.php
599
+ use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument;
600
+
601
+ $container->register(App\HandlerCollection::class)
602
+ // inject all services tagged with app.handler as first argument
603
+ ->addArgument(new TaggedIteratorArgument('app.handler', null, null, false, 'getDefaultPriority'));
604
+
605
+ Now you can define the priority on the service class::
606
+
607
+ // src/Handler/One.php
608
+ namespace App\Handler;
609
+
610
+ class One
611
+ {
612
+ public static function getDefaultPriorityMethod(): int
613
+ {
614
+ return 10;
615
+ }
616
+ }
0 commit comments