diff --git a/lib/private/EventDispatcher/EventDispatcher.php b/lib/private/EventDispatcher/EventDispatcher.php index bbf6ae2b36..8830bae79d 100644 --- a/lib/private/EventDispatcher/EventDispatcher.php +++ b/lib/private/EventDispatcher/EventDispatcher.php @@ -31,6 +31,7 @@ use OCP\IContainer; use OCP\ILogger; use OCP\IServerContainer; use Symfony\Component\EventDispatcher\EventDispatcher as SymfonyDispatcher; +use function get_class; class EventDispatcher implements IEventDispatcher { @@ -74,6 +75,10 @@ class EventDispatcher implements IEventDispatcher { $this->dispatcher->dispatch($event, $eventName); } + public function dispatchTyped(Event $event): void { + $this->dispatch(get_class($event), $event); + } + /** * @return SymfonyDispatcher */ diff --git a/lib/public/EventDispatcher/IEventDispatcher.php b/lib/public/EventDispatcher/IEventDispatcher.php index af4d5316a7..630b7e3c8a 100644 --- a/lib/public/EventDispatcher/IEventDispatcher.php +++ b/lib/public/EventDispatcher/IEventDispatcher.php @@ -58,4 +58,16 @@ interface IEventDispatcher { */ public function dispatch(string $eventName, Event $event): void; + /** + * Dispatch a typed event + * + * Only use this with subclasses of ``\OCP\EventDispatcher\Event``. + * The object's class will determine the event name. + * + * @param Event $event + * + * @since 18.0.0 + */ + public function dispatchTyped(Event $event): void; + }