vendor/league/tactician-bundle/src/DependencyInjection/HandlerMapping/TagBasedMapping.php line 38

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace League\Tactician\Bundle\DependencyInjection\HandlerMapping;
  4. use Symfony\Component\DependencyInjection\ContainerBuilder;
  5. use Symfony\Component\DependencyInjection\Definition;
  6. abstract class TagBasedMapping implements HandlerMapping
  7. {
  8.     const TAG_NAME 'tactician.handler';
  9.     public function build(ContainerBuilder $containerRouting $routing): Routing
  10.     {
  11.         foreach ($container->findTaggedServiceIds(self::TAG_NAME) as $serviceId => $tags) {
  12.             foreach ($tags as $attributes) {
  13.                 $this->mapServiceByTag($container$routing$serviceId$attributes);
  14.             }
  15.         }
  16.         return $routing;
  17.     }
  18.     /**
  19.      * @param ContainerBuilder $container
  20.      * @param Routing $routing
  21.      * @param $serviceId
  22.      * @param $attributes
  23.      */
  24.     private function mapServiceByTag(ContainerBuilder $containerRouting $routing$serviceId$attributes)
  25.     {
  26.         $definition $container->getDefinition($serviceId);
  27.         if (!$this->isSupported($container$definition$attributes)) {
  28.             return;
  29.         }
  30.         foreach ($this->findCommandsForService($container$definition$attributes) as $commandClassName) {
  31.             if (isset($attributes['bus'])) {
  32.                 $routing->routeToBus($attributes['bus'], $commandClassName$serviceId);
  33.             } else {
  34.                 $routing->routeToAllBuses($commandClassName$serviceId);
  35.             }
  36.         }
  37.     }
  38.     abstract protected function isSupported(ContainerBuilder $containerDefinition $definition, array $tagAttributes): bool;
  39.     abstract protected function findCommandsForService(ContainerBuilder $containerDefinition $definition, array $tagAttributes): array;
  40. }