vendor/shopware/core/Framework/Event/NestedEventDispatcher.php line 27

  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Framework\Event;
  3. use Shopware\Core\Framework\Log\Package;
  4. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. #[Package('core')]
  7. class NestedEventDispatcher implements EventDispatcherInterface
  8. {
  9.     /**
  10.      * @internal
  11.      */
  12.     public function __construct(private readonly EventDispatcherInterface $dispatcher)
  13.     {
  14.     }
  15.     public function dispatch(object $event, ?string $eventName null): object
  16.     {
  17.         if ($event instanceof NestedEvent && $events $event->getEvents()) {
  18.             foreach ($events as $nested) {
  19.                 $name null;
  20.                 if ($nested instanceof GenericEvent) {
  21.                     $name $nested->getName();
  22.                 }
  23.                 $this->dispatch($nested$name);
  24.             }
  25.         }
  26.         return $this->dispatcher->dispatch($event$eventName);
  27.     }
  28.     /**
  29.      * @param callable $listener can not use native type declaration @see https://github.com/symfony/symfony/issues/42283
  30.      */
  31.     public function addListener(string $eventName$listenerint $priority 0): void // @phpstan-ignore-line
  32.     {
  33.         /** @var callable(object): void $listener - Specify generic callback interface callers can provide more specific implementations */
  34.         $this->dispatcher->addListener($eventName$listener$priority);
  35.     }
  36.     public function addSubscriber(EventSubscriberInterface $subscriber): void
  37.     {
  38.         $this->dispatcher->addSubscriber($subscriber);
  39.     }
  40.     public function removeListener(string $eventName, callable $listener): void
  41.     {
  42.         /** @var callable(object): void $listener - Specify generic callback interface callers can provide more specific implementations */
  43.         $this->dispatcher->removeListener($eventName$listener);
  44.     }
  45.     public function removeSubscriber(EventSubscriberInterface $subscriber): void
  46.     {
  47.         $this->dispatcher->removeSubscriber($subscriber);
  48.     }
  49.     /**
  50.      * @return array<array-key, array<array-key, callable(object): void>|callable(object): void>
  51.      */
  52.     public function getListeners(?string $eventName null): array
  53.     {
  54.         return $this->dispatcher->getListeners($eventName);
  55.     }
  56.     public function getListenerPriority(string $eventName, callable $listener): ?int
  57.     {
  58.         /** @var callable(object): void $listener - Specify generic callback interface callers can provide more specific implementations */
  59.         return $this->dispatcher->getListenerPriority($eventName$listener);
  60.     }
  61.     public function hasListeners(?string $eventName null): bool
  62.     {
  63.         return $this->dispatcher->hasListeners($eventName);
  64.     }
  65. }