2012-12-02 68 views
0

我在2.0.4上。無法在Zend Framework 2中訪問ServiceManager

我的文件:

https://gist.github.com/4191490

據當時http://framework.zend.com/manual/2.0/en/modules/zend.service-manager.quick-start.html

的文檔。如果一個類實現ServiceManagerAwareInterface,那麼它的對象將與服務管理器初始化。我做了同樣的事情(請參閱我的源代碼中的BaseEntity.php)。但是,服務管理器從未初始化過,因此無法從子類Snippet中獲得。

問題:如何檢索全局或模塊的ServireManager實例,以便我可以訪問其他服務? (他們大多是單身)

回答

1

對於ServiceManagerAwareInterface所建議的實例需要走出ServiceManager的工作。這是因爲有一個Initalizer連接到ServiceManager,如果找到該接口,它將注入ServiceManager(您可以在 - Zend\Mvc\Service\ServiceManagerConfig中看到此內容)。

您可以將您的類添加到SevriceManager配置,然後拉他們通過你的$sm實例,甚至修改您的getTableGateway添加以下內容:

if ($prototype instanceof ServiceManagerAwareInterface) 
{ 
    $prototype->setServiceManager($sm); 
} 
1

ServiceManagerAwareInterface已被棄用,不aoutoinjected
使用ServiceLocatorAwareInterface代替

+0

實際上ServiceManagerAwareInterface是一個在使用時,隨着的ServiceManager傳遞到Module.php中的工廠方法,而不是ServiceLocator。問題在於ServiceManagerAwareInterface沒有自動初始化,所以我最終手動初始化了所有實例,正如DrBeza所建議的那樣。 – thoaionline

+0

實際上,ServiceManagerAwareInterface已棄用。相反,請使用ServiceLocatorAwareInterface,因爲ServiceManager是具體的ServiceLocator – Xerkus