ZF2中的getEventManager不起作用

时间:2013-09-10 15:11:07

标签: zend-framework2

我有这个代码,在哪里获取getEventManager但似乎不起作用:

<?php
namespace Application\Service;

use Zend\EventManager\EventManagerAwareInterface;
use Zend\EventManager\EventManagerInterface;

class ServiceUser implements EventManagerAwareInterface
{

    protected $eventManager;

    public function insert($data)
    {
        $this->getEventManager()->trigger('user.new', $this, array('user' => $data));
    }

    public function setEventManager(EventManagerInterface $eventManager)
    {
        $eventManager->addIdentifiers(array(__CLASS__, get_called_class(), 'Module\User'));

        $this->eventManager = $eventManager;
        return $this;
    }

    public function getEventManager()
    {
        return $this->eventManager;
    }
}

生成的错误:

  

中的非对象上调用成员函数trigger()

1 个答案:

答案 0 :(得分:0)

如何构建ServiceUser对象? *Aware接口仅在通过服务定位器构造它们时才起作用。

因此,您需要在配置中注册该服务:

'service_manager' => array(
    'invokables' => array(
        'user-service' => 'My\Foo\Service\User',
    ),
),

然后通过服务定位器(例如,在您的控制器中)请求服务:

$service = $this->getServiceLocator()->get('user-service');

这将为您提供注入事件管理器的服务。