function ContainerAwareEventDispatcher::getListeners

Same name in other branches
  1. 8.9.x core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php \Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher::getListeners()
  2. 10 core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php \Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher::getListeners()
  3. 11.x core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php \Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher::getListeners()

File

core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php, line 156

Class

ContainerAwareEventDispatcher
A performance optimized container aware event dispatcher.

Namespace

Drupal\Component\EventDispatcher

Code

public function getListeners($event_name = NULL) : array {
    $result = [];
    if ($event_name === NULL) {
        // If event name was omitted, collect all listeners of all events.
        foreach (array_keys($this->listeners) as $event_name) {
            $listeners = $this->getListeners($event_name);
            if (!empty($listeners)) {
                $result[$event_name] = $listeners;
            }
        }
    }
    elseif (isset($this->listeners[$event_name])) {
        // Sort listeners if necessary.
        if (isset($this->unsorted[$event_name])) {
            krsort($this->listeners[$event_name]);
            unset($this->unsorted[$event_name]);
        }
        // Collect listeners and resolve callables if necessary.
        foreach ($this->listeners[$event_name] as &$definitions) {
            foreach ($definitions as &$definition) {
                if (!isset($definition['callable'])) {
                    $definition['callable'] = [
                        $this->container
                            ->get($definition['service'][0]),
                        $definition['service'][1],
                    ];
                }
                if (is_array($definition['callable']) && isset($definition['callable'][0]) && $definition['callable'][0] instanceof \Closure) {
                    $definition['callable'][0] = $definition['callable'][0]();
                }
                $result[] = $definition['callable'];
            }
        }
    }
    return $result;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.