Ejemplo n.º 1
0
 /**
  * Helper function to test single method attaching for dispatcher filters
  *
  * @param CakeEvent $event
  * @return void
  */
 public function filterTest($event)
 {
     $event->data['request']->params['eventName'] = $event->name();
 }
Ejemplo n.º 2
0
 /**
  * Dispatches a new event to all configured listeners
  *
  * @param string|CakeEvent $event the event key name or instance of CakeEvent
  * @return CakeEvent
  */
 public function dispatch($event)
 {
     if (is_string($event)) {
         $event = new CakeEvent($event);
     }
     $listeners = $this->listeners($event->name());
     if (empty($listeners)) {
         return $event;
     }
     foreach ($listeners as $listener) {
         if ($event->isStopped()) {
             break;
         }
         if ($listener['passParams'] === true) {
             $result = call_user_func_array($listener['callable'], $event->data);
         } else {
             $result = call_user_func($listener['callable'], $event);
         }
         if ($result === false) {
             $event->stopPropagation();
         }
         if ($result !== null) {
             $event->result = $result;
         }
     }
     return $event;
 }
Ejemplo n.º 3
0
 /**
  * Tests the name() method
  *
  * @return void
  * @triggers fake.event
  */
 public function testName()
 {
     $event = new CakeEvent('fake.event');
     $this->assertEquals('fake.event', $event->name());
 }
Ejemplo n.º 4
0
 /**
  * Dispatches a new event to all configured listeners
  *
  * @param string|CakeEvent $event the event key name or instance of CakeEvent
  * @return CakeEvent
  * @triggers $event
  */
 public function dispatch($event)
 {
     if (is_string($event)) {
         $event = new CakeEvent($event);
     }
     $listeners = $this->listeners($event->name());
     if (empty($listeners)) {
         return $event;
     }
     foreach ($listeners as $listener) {
         if ($event->isStopped()) {
             break;
         }
         if ($listener['passParams'] === true) {
             $result = call_user_func_array($listener['callable'], $event->data);
         } else {
             $result = call_user_func($listener['callable'], $event);
         }
         if ($result === false) {
             $event->stopPropagation();
         }
         // CUSTOMIZE ADD 2013/09/23 ryuring
         // ObjectCollection を継承しているイベントの場合、
         // 複数のオブジェクトに対するイベントの結果が配列で返ってくるが、
         // 全ての結果がNULLの場合、その前のイベントの結果が上書きされてしまう。
         // 全ての結果がNULLの場合には、結果がNULLとみなし、上書きしない仕様に変更した
         // >>>
         if (is_array($result) && array_key_exists(0, $result)) {
             $notNull = false;
             foreach ($result as $key => $val) {
                 if ($val !== null) {
                     $notNull = true;
                 }
             }
             if (!$notNull) {
                 $result = null;
             }
         }
         // <<<
         if ($result !== null) {
             $event->result = $result;
         }
     }
     return $event;
 }