0

我有这段代码,在哪里可以得到 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()

4

1 回答 1

0

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

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

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

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

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

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

于 2013-09-10T15:36:05.447 回答