vendor/symfony/event-dispatcher/Debug/WrappedListener.php line 115

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Symfony\Component\EventDispatcher\Debug;
  11. use Symfony\Component\EventDispatcher\Event;
  12. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  13. use Symfony\Component\Stopwatch\Stopwatch;
  14. use Symfony\Component\VarDumper\Caster\ClassStub;
  15. /**
  16.  * @author Fabien Potencier <fabien@symfony.com>
  17.  */
  18. class WrappedListener
  19. {
  20.     private $listener;
  21.     private $name;
  22.     private $called;
  23.     private $stoppedPropagation;
  24.     private $stopwatch;
  25.     private $dispatcher;
  26.     private $pretty;
  27.     private $stub;
  28.     private $priority;
  29.     private static $hasClassStub;
  30.     public function __construct($listener$nameStopwatch $stopwatchEventDispatcherInterface $dispatcher null)
  31.     {
  32.         $this->listener $listener;
  33.         $this->stopwatch $stopwatch;
  34.         $this->dispatcher $dispatcher;
  35.         $this->called false;
  36.         $this->stoppedPropagation false;
  37.         if (\is_array($listener)) {
  38.             $this->name = \is_object($listener[0]) ? \get_class($listener[0]) : $listener[0];
  39.             $this->pretty $this->name.'::'.$listener[1];
  40.         } elseif ($listener instanceof \Closure) {
  41.             $r = new \ReflectionFunction($listener);
  42.             if (false !== strpos($r->name'{closure}')) {
  43.                 $this->pretty $this->name 'closure';
  44.             } elseif ($class $r->getClosureScopeClass()) {
  45.                 $this->name $class->name;
  46.                 $this->pretty $this->name.'::'.$r->name;
  47.             } else {
  48.                 $this->pretty $this->name $r->name;
  49.             }
  50.         } elseif (\is_string($listener)) {
  51.             $this->pretty $this->name $listener;
  52.         } else {
  53.             $this->name = \get_class($listener);
  54.             $this->pretty $this->name.'::__invoke';
  55.         }
  56.         if (null !== $name) {
  57.             $this->name $name;
  58.         }
  59.         if (null === self::$hasClassStub) {
  60.             self::$hasClassStub class_exists(ClassStub::class);
  61.         }
  62.     }
  63.     public function getWrappedListener()
  64.     {
  65.         return $this->listener;
  66.     }
  67.     public function wasCalled()
  68.     {
  69.         return $this->called;
  70.     }
  71.     public function stoppedPropagation()
  72.     {
  73.         return $this->stoppedPropagation;
  74.     }
  75.     public function getPretty()
  76.     {
  77.         return $this->pretty;
  78.     }
  79.     public function getInfo($eventName)
  80.     {
  81.         if (null === $this->stub) {
  82.             $this->stub self::$hasClassStub ? new ClassStub($this->pretty.'()'$this->listener) : $this->pretty.'()';
  83.         }
  84.         return [
  85.             'event' => $eventName,
  86.             'priority' => null !== $this->priority $this->priority : (null !== $this->dispatcher $this->dispatcher->getListenerPriority($eventName$this->listener) : null),
  87.             'pretty' => $this->pretty,
  88.             'stub' => $this->stub,
  89.         ];
  90.     }
  91.     public function __invoke(Event $event$eventNameEventDispatcherInterface $dispatcher)
  92.     {
  93.         $dispatcher $this->dispatcher ?: $dispatcher;
  94.         $this->called true;
  95.         $this->priority $dispatcher->getListenerPriority($eventName$this->listener);
  96.         $e $this->stopwatch->start($this->name'event_listener');
  97.         \call_user_func($this->listener$event$eventName$dispatcher);
  98.         if ($e->isStarted()) {
  99.             $e->stop();
  100.         }
  101.         if ($event->isPropagationStopped()) {
  102.             $this->stoppedPropagation true;
  103.         }
  104.     }
  105. }