无法使用zend2 EventManager传输对象

时间:2014-09-09 12:38:41

标签: php events zend-framework2

我正在使用 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显示在上面的代码中。唯一没有出现的值是发件人对象

非常感谢我对错误做了一些建议。

1 个答案:

答案 0 :(得分:0)

可能是$this指向了错误的对象。

尝试一次:

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