2014-09-09 2 views
2

Я использую менеджер событий zend2 для запуска события. Затем я добавляю обратный вызов слушателю для этого события.невозможно передать объекты с помощью zend2 EventManager

код работает до этого момента, проблема в том, что я не могу передать объекты с помощью триггера.

Я продолжаю получать следующее сообщение;

Call to a member function getId() on a non-object 

ниже мой код;

Триггер:

use ZfcBase\EventManager\EventProvider as eventManger; 

//code/method that gets the sender's object not shown here; 

class EventTriggers extends eventManger 
{ 

    public function triggerEvent() 
     { 
      // var_dump($this->getSender()->getId()) 

      $this->getEventManager()->trigger(__FUNCTION__, $this, array('sender' => $this->getSender()->getId(), 
                     'receiver' => 11)); 
     } 

} 

Обратите внимание, что если я var_dump$ this-> getSender() -> GetId() возвращает Id. однако, как только место на курке значения больше не показывать

Слушатель (удерживаемого в другом классе и доступ через sharedEventManger)

use Zend\EventManager\SharedEventManager; 

$sharedEvent = new SharedEventManager; 
     $sharedEvent->attach('Messages\Models\EventTriggers', 'triggerEvent', function($e) { 
      $event = $e->getName(); 
      $target = get_class($e->getTarget()); 

      $params = $e->getParams(); 

      var_dump($params); die(); 
      printf(
       '%s called on %s, using params %s', 
       $event, 
       $target, 
       $params 
      ); 
     }); 

     $event = new EventTriggers(); 
     $event->getEventManager()->setSharedManager($sharedEvent); 

     $event->triggerEvent(); 

приемник Id показывает в приведенном выше коде. единственное значение, которое не появляется, - это объект отправителя

действительно оценил бы некоторые советы о том, что я сделал неправильно.

+0

это странно, если 'getSender()' это публичный метод попытайтесь получить доступ к его внутри обработчика событий '$ e-> GetTarget() -> getSender() - > getId() 'посмотрим, что получится – Exlord

ответ

0

Возможно, что $this указывает на неправильный объект.

Попробуйте один раз, как это:

public function triggerEvent() 
{ 
    $sender_id = $this->getSender()->getId(); 
    $this->getEventManager()->trigger(__FUNCTION__, $this, array(
     'sender' => $sender_id, 
     'receiver' => 11 
    )); 
} 
+0

Привет, Уилт, спасибо за ответ. Я попробовал, но он все еще не возвращает объект. Объект просто не передается на –

+0

@PaulKendal «но он все еще не возвращает объект» - вы вызываете 'getId()', так что, конечно, это 'string' или 'int'? – AlexP

+0

извините. Я попытался вернуть как строку, так и объект i.e $ this-> getSender() или $ this-> getSender() -> getId(). он ничего не возвращает –

Смежные вопросы