Пример #1
0
 /**
  * {@inheritDoc}
  */
 public function trigger(EventInterface $event)
 {
     if ($event instanceof BaseCakeEvent) {
         $this->eventManager->dispatch($event);
     }
     return $this;
 }
Пример #2
0
 /**
  * Create the template loader.
  *
  * @return \Twig_LoaderInterface
  */
 protected function getLoader()
 {
     $event = new Event('TwigView.TwigView.loader', $this, ['loader' => new Loader()]);
     $this->eventManager->dispatch($event);
     if (isset($event->result['loader'])) {
         return $event->result['loader'];
     }
     return $event->data['loader'];
 }
Пример #3
0
 /**
  * Similar to "trigger()" but this method expects that data is given as an
  * associative array instead of function arguments.
  *
  * ### Usage:
  *
  * ```php
  * EventDispatcher::instance()->triggerArray('myEvent', [$data1, $data2]);
  * ```
  *
  * Which is equivalent to:
  *
  * ```php
  * EventDispatcher::instance()->trigger('myEvent', $data1, $data2);
  * ```
  *
  * @param array|string $eventName The event name to trigger
  * @param array $data Information to be passed to event listener
  * @return \Cake\Event\Event The event object that was triggered
  */
 public function triggerArray($eventName, array $data = [])
 {
     $event = $this->_prepareEvent($eventName, $data);
     $this->_log($event->name());
     $this->_eventManager->dispatch($event);
     return $event;
 }
Пример #4
0
 /**
  * Triggers a Crud event by creating a new subject and filling it with $data
  * if $data is an instance of CrudSubject it will be reused as the subject
  * object for this event.
  *
  * If Event listeners return a CakeResponse object, the this method will throw an
  * exception and fill a 'response' property on it with a reference to the response
  * object.
  *
  * @param string $eventName Event name
  * @param \Crud\Event\Subject $data Event data
  * @throws Exception if any event listener return a CakeResponse object.
  * @return \Cake\Event\Event
  */
 public function trigger($eventName, Subject $data = null)
 {
     $eventName = $this->_config['eventPrefix'] . '.' . $eventName;
     $Subject = $data ?: $this->getSubject();
     $Subject->addEvent($eventName);
     if (!empty($this->_config['eventLogging'])) {
         $this->logEvent($eventName, $data);
     }
     $Event = new Event($eventName, $Subject);
     $this->_eventManager->dispatch($Event);
     if ($Event->result instanceof Response) {
         $Exception = new Exception();
         $Exception->response = $Event->result;
         throw $Exception;
     }
     return $Event;
 }
Пример #5
0
 /**
  * Test that events are dispatched properly when there are global and local
  * listeners at the same priority.
  *
  * @return void
  */
 public function testDispatchWithGlobalAndLocalEvents()
 {
     $listener = new CustomTestEventListener();
     EventManager::instance()->attach($listener);
     $listener2 = new EventTestListener();
     $manager = new EventManager();
     $manager->attach(array($listener2, 'listenerFunction'), 'fake.event');
     $manager->dispatch(new Event('fake.event', $this));
     $this->assertEquals(array('listenerFunction'), $listener->callStack);
     $this->assertEquals(array('listenerFunction'), $listener2->callStack);
 }
Пример #6
0
 /**
  * Create the template loader.
  *
  * @return \Twig_LoaderInterface
  */
 protected function getLoader()
 {
     $event = LoaderEvent::create(new Loader());
     $this->eventManager->dispatch($event);
     return $event->getResultLoader();
 }
Пример #7
0
 public function dispatch($event)
 {
     $this->_log[] = ['name' => $event->name(), 'subject' => $event->subject()];
     parent::dispatch($event);
 }
Пример #8
0
 /**
  * Test getting a list of dispatched events from the manager.
  *
  * @return void
  * @triggers my_event $this
  * @triggers my_second_event $this
  */
 public function testGetDispatchedEvents()
 {
     $eventList = new EventList();
     $event = new Event('my_event', $this);
     $event2 = new Event('my_second_event', $this);
     $manager = new EventManager();
     $manager->setEventList($eventList);
     $manager->dispatch($event);
     $manager->dispatch($event2);
     $result = $manager->getEventList();
     $this->assertInstanceOf('\\Cake\\Event\\EventList', $result);
     $this->assertCount(2, $result);
     $this->assertEquals($result[0], $event);
     $this->assertEquals($result[1], $event2);
     $manager->getEventList()->flush();
     $result = $manager->getEventList();
     $this->assertCount(0, $result);
     $manager->unsetEventList();
     $manager->dispatch($event);
     $manager->dispatch($event2);
     $result = $manager->getEventList();
     $this->assertNull($result);
 }
Пример #9
0
 /**
  * tests assertEventFired
  *
  * @return void
  */
 public function testEventFired()
 {
     $manager = EventManager::instance();
     $manager->setEventList(new EventList());
     $manager->trackEvents(true);
     $event = new Event('my.event');
     $manager->dispatch($event);
     $this->assertEventFired('my.event');
     $manager = new EventManager();
     $manager->setEventList(new EventList());
     $manager->trackEvents(true);
     $event = new Event('my.event');
     $manager->dispatch($event);
     $this->assertEventFired('my.event', $manager);
 }