Я использую менеджер событий 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 показывает в приведенном выше коде. единственное значение, которое не появляется, - это объект отправителя
действительно оценил бы некоторые советы о том, что я сделал неправильно.
это странно, если 'getSender()' это публичный метод попытайтесь получить доступ к его внутри обработчика событий '$ e-> GetTarget() -> getSender() - > getId() 'посмотрим, что получится – Exlord