/** * {@inheritdoc} */ public function dispatch($event) { $event = $this->ensureEvent($event); // pre dispatch event $preDispatchEvent = new PreDispatchEvent($event); $eventName = $preDispatchEvent->eventName(); if ($listeners = $this->eventListeners($eventName)) { $this->doDispatch($listeners, $preDispatchEvent); } // dispatch event $eventName = $event->eventName(); if ($listeners = $this->eventListeners($eventName)) { $this->doDispatch($listeners, $event); } // post dispatch event $postDispatchEvent = new PostDispatchEvent($event); $eventName = $postDispatchEvent->eventName(); if ($listeners = $this->eventListeners($eventName)) { $this->doDispatch($listeners, $postDispatchEvent); } return $event; }