Browse Source

Merge pull request #17106 from nextcloud/feature/dispatch-typed-event

Add Symfony inspired typed event dispatcher method
blizzz 4 years ago
parent
commit
ac48a9ba61

+ 5 - 0
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
 	 */

+ 12 - 0
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;
+
 }