Beispiel #1
0
 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();
 }
Beispiel #2
0
 /**
  * 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;
 }
Beispiel #3
0
 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);
 }
Beispiel #4
0
 public function register2(Event $e)
 {
     $data = $e->data();
     $data['called']++;
     $e->data($data);
 }
Beispiel #5
0
 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();