public function testPluginContext() { $manager = new PluginManager('', ''); $testPlugin = $this->getMock('Zumba\\Symbiosis\\Test\\Plugin\\MockablePlugin', ['mockMe']); $testPlugin->expects($this->once())->method('mockMe'); $manager->initializePlugin($testPlugin); $event = new Event('test', ['val' => true]); $event->setPluginContext($manager)->trigger(); }
/** * Call all listeners registered to provided event with data. * * Returns true if a registered event's callback was called. * * @param \Zumba\Symbiosis\Event\Event $event Event object * @param array $data Data to append/override in the event object * @return boolean */ public function trigger(Event $event, $data = array()) { $eventName = $event->name(); $event->data(array_merge($event->data(), $data)); if (!isset($this->registry[$eventName])) { Log::write('No event registered.', Log::LEVEL_DEBUG, compact('eventName')); return false; } Log::write('Event triggered.', Log::LEVEL_DEBUG, compact('eventName')); foreach ($this->registry[$eventName] as $listeners) { foreach ($listeners as $listener) { if ($listener($event) === false) { $event->stopPropagation(); } if (!$event->isPropagating()) { Log::write('Propagation stopped.', Log::LEVEL_DEBUG, compact('listener', 'eventName')); break; } } } return true; }
public function testEventPriority() { // lower priority $lowPriority = function (Event $event) { EventManagerTest::$order[] = 3; }; $highPriority = function (Event $event) { EventManagerTest::$order[] = 1; }; $alsoHighPriority = function (Event $event) { EventManagerTest::$order[] = 2; }; EventManager::register('test.event1', $lowPriority, EventRegistry::PRIORITY_LOW); EventManager::register('test.event1', $highPriority, EventRegistry::PRIORITY_HIGH); EventManager::register('test.event1', $alsoHighPriority, EventRegistry::PRIORITY_HIGH); $event = new Event('test.event1'); $event->trigger(); $this->assertEquals(array(1, 2, 3), static::$order); }
public function register2(Event $e) { $data = $e->data(); $data['called']++; $e->data($data); }
public function testEventPriority() { $event = new Event('test.event1', array()); // lower priority $lowPriority = function (Event $event) { $data = $event->data(); $data['order'][] = 3; $event->data($data); }; $highPriority = function (Event $event) { $data = $event->data(); $data['order'][] = 1; $event->data($data); }; $alsoHighPriority = function (Event $event) { $data = $event->data(); $data['order'][] = 2; $event->data($data); }; $this->registry->register('test.event1', $lowPriority, EventRegistry::PRIORITY_LOW); $this->registry->register('test.event1', $highPriority, EventRegistry::PRIORITY_HIGH); $this->registry->register('test.event1', $alsoHighPriority, EventRegistry::PRIORITY_HIGH); $event = new Event('test.event1', array('order' => array())); $this->registry->trigger($event); $data = $event->data(); $this->assertEquals(array(1, 2, 3), $data['order']); }
<?php use Zumba\Symbiosis\Event\Event; // Somewhere in your app, trigger plugins listening to event $event = new Event('sample.someevent', array('ping' => 'pong')); $event->trigger();