ZF2 DI扩展接口错误类型为“NULL”的无效实例化器

时间:2013-02-27 12:24:00

标签: php dependency-injection zend-framework2

我正试图从Di

获得Zend\EventManager\EventManager
$di     = new Di();
$di->configure(new Config(array(/*etc*/));
$events = $di->get('Zend\EventManager\EventManager');

但是我收到此错误

致命错误:未捕获的异常'Zend \ Di \ Exception \ RuntimeException',消息'类型为“无效的实例化器”为“Zend \ EventManager \ SharedEventManagerInterface”的“NULL”。'

我相信这是因为EventManagerInterface扩展了SharedEventManagerInterface?

我试过了

'preferences'   => array(
    'Zend\EventManager\SharedEventManagerInterface' 
        => 'Zend\EventManager\EventManager',
),

并定义实例化器

'Zend\EventManager\SharedEventManagerInterface' => array(
    'instantiator' => 'Zend\EventManager\EventManager::__construct'
),

该错误会导致什么配置?

1 个答案:

答案 0 :(得分:0)

Zend\EventManager\EventManager不是有效Zend\EventManager\SharedEventManagerInterface:请改用Zend\EventManager\SharedEventManager

如果要注入共享事件管理器,请使用以下配置:

'di' => array( 
    'instance' => array(
        'preference' => array(
            'Zend\EventManager\SharedEventManagerInterface' 
                => 'Zend\EventManager\SharedEventManager',
        ),
    ),
),

每次请求通用Zend\Di时,基本上会告诉Zend\EventManager\SharedEventManager使用Zend\EventManager\SharedEventManagerInterface

我在this blogpost中有一个工作示例。