From f36228b7a6cb8fb9bd2535b9af2146d3bd1228c1 Mon Sep 17 00:00:00 2001 From: Dave Mc Nicoll Date: Tue, 30 May 2023 15:40:31 -0400 Subject: [PATCH] - Basic event manager middleware --- src/EventDefinition.php | 12 ++++++++++++ src/EventManager.php | 16 ++++++++++++---- src/EventMiddleware.php | 9 +++++++++ src/EventTrait.php | 12 ++++++++++++ 4 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 src/EventDefinition.php create mode 100644 src/EventTrait.php diff --git a/src/EventDefinition.php b/src/EventDefinition.php new file mode 100644 index 0000000..eca76b0 --- /dev/null +++ b/src/EventDefinition.php @@ -0,0 +1,12 @@ +eventList, fn($ev) => $ev->name === $name); + return array_filter($this->eventList, fn($ev) => property_exists($ev, 'name') && $ev->name === $name); } - public function execute(string $name, ...$arguments) : void + public function execute(string $name, &...$arguments) : void { + $continue = true; + foreach($this->eventFromName($name) as $event) { - $event->execute($this->container, ...$arguments); + if ($continue) { + $event->execute($this->container, ...$arguments); + $continue = empty($event->stopPropagation); + } } foreach($this->eventfromType($name) as $event) { - call_user_func_array([ $event, 'execute'], $arguments); + if ($continue) { + call_user_func_array([ $event, 'execute'], $arguments); + $continue = empty($event->stopPropagation); + } } } } \ No newline at end of file diff --git a/src/EventMiddleware.php b/src/EventMiddleware.php index d4c9e0f..7169271 100644 --- a/src/EventMiddleware.php +++ b/src/EventMiddleware.php @@ -34,4 +34,13 @@ class EventMiddleware implements MiddlewareInterface return $this; } + + public function fromDefinition(EventDefinition $definition) : self + { + foreach($definition->list as $event) { + $this->eventManager->eventRegister($event); + } + + return $this; + } } diff --git a/src/EventTrait.php b/src/EventTrait.php new file mode 100644 index 0000000..69dff69 --- /dev/null +++ b/src/EventTrait.php @@ -0,0 +1,12 @@ +