2013-02-27 50 views
1

我想從二ZF2 DI擴展型「NULL」

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

一個Zend\EventManager\EventManager但是我得到這個錯誤

致命錯誤的接口錯誤無效的初始化程序:未捕獲的異常' Zend \ EventManager \ SharedEventManagerInterface「中的Zend \ Di \ Exception \ RuntimeException'消息'類型爲」NULL「的無效實例化器。

我相信這是因爲EventManagerInterface擴展了SharedEventManagerInterface?

我已經試過

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

,並定義一個初始化

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

應該是什麼配置過度來到這個錯誤?

回答

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有一個工作示例。

+0

它並沒有很好的工作,我們有任何其他假設的配置值? – gawpertron 2013-03-06 13:36:58

+0

奇怪。我自己試了一下(見https://gist.github.com/Ocramius/5099518),但它失敗了,因爲它嘗試注入某些東西,因爲EventManagerInterface ...雖然適用於ZF2'2.0。*'。 – Ocramius 2013-03-06 14:08:04

+0

不用擔心,改爲使用服務管理器。 – gawpertron 2013-03-06 15:39:51