我正在使用 zend2事件管理器来触发事件。然后我将回调附加到该事件的监听器。
代码到目前为止工作,问题是我无法使用触发器传输对象。
我不断收到以下消息;
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 :(得分:0)
可能是$this
指向了错误的对象。
尝试一次:
public function triggerEvent()
{
$sender_id = $this->getSender()->getId();
$this->getEventManager()->trigger(__FUNCTION__, $this, array(
'sender' => $sender_id,
'receiver' => 11
));
}