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

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.     private $listener;
  20.     private $name;
  21.     private $called;
  22.     private $stoppedPropagation;
  23.     private $stopwatch;
  24.     private $dispatcher;
  25.     private $pretty;
  26.     private $stub;
  27.     private $priority;
  28.     private static $hasClassStub;
  29.     public function __construct($listener$nameStopwatch $stopwatchEventDispatcherInterface $dispatcher null) {
  30.         $this->listener $listener;
  31.         $this->stopwatch $stopwatch;
  32.         $this->dispatcher $dispatcher;
  33.         $this->called false;
  34.         $this->stoppedPropagation false;
  35.         if (\is_array($listener)) {
  36.             $this->name = \is_object($listener[0]) ? \get_class($listener[0]) : $listener[0];
  37.             $this->pretty $this->name '::' $listener[1];
  38.         } elseif ($listener instanceof \Closure) {
  39.             $r = new \ReflectionFunction($listener);
  40.             if (false !== strpos($r->name'{closure}')) {
  41.                 $this->pretty $this->name 'closure';
  42.             } elseif ($class $r->getClosureScopeClass()) {
  43.                 $this->name $class->name;
  44.                 $this->pretty $this->name '::' $r->name;
  45.             } else {
  46.                 $this->pretty $this->name $r->name;
  47.             }
  48.         } elseif (\is_string($listener)) {
  49.             $this->pretty $this->name $listener;
  50.         } else {
  51.             $this->name = \get_class($listener);
  52.             $this->pretty $this->name '::__invoke';
  53.         }
  54.         if (null !== $name) {
  55.             $this->name $name;
  56.         }
  57.         if (null === self::$hasClassStub) {
  58.             self::$hasClassStub class_exists(ClassStub::class);
  59.         }
  60.     }
  61.     public function getWrappedListener() {
  62.         return $this->listener;
  63.     }
  64.     public function wasCalled() {
  65.         return $this->called;
  66.     }
  67.     public function stoppedPropagation() {
  68.         return $this->stoppedPropagation;
  69.     }
  70.     public function getPretty() {
  71.         return $this->pretty;
  72.     }
  73.     public function getInfo($eventName) {
  74.         if (null === $this->stub) {
  75.             $this->stub self::$hasClassStub ? new ClassStub($this->pretty '()'$this->listener) : $this->pretty '()';
  76.         }
  77.         return [
  78.             'event' => $eventName,
  79.             'priority' => null !== $this->priority $this->priority : (null !== $this->dispatcher $this->dispatcher->getListenerPriority($eventName$this->listener) : null),
  80.             'pretty' => $this->pretty,
  81.             'stub' => $this->stub,
  82.         ];
  83.     }
  84.     public function __invoke(Event $event$eventNameEventDispatcherInterface $dispatcher) {
  85.         $dispatcher $this->dispatcher ?: $dispatcher;
  86.         $this->called true;
  87.         $this->priority $dispatcher->getListenerPriority($eventName$this->listener);
  88.         $e $this->stopwatch->start($this->name'event_listener');
  89.         ($this->listener)($event$eventName$dispatcher);
  90.         if ($e->isStarted()) {
  91.             $e->stop();
  92.         }
  93.         if ($event->isPropagationStopped()) {
  94.             $this->stoppedPropagation true;
  95.         }
  96.     }
  97. }