2015-09-28 31 views
1

我有一個公共類,用於重用所有模塊的功能。我已經把它放在zf2工具類中的getServiceLocator

Application\Service\Utility.php 

現在我可以在我的控制器對象作爲

$utilObj = new Utility(); 

然後調用我的功能$utilObj->myFn();

一切工作正常。

但我不能在那裏得到getServiceLocator()函數(在myFn in Utility.php中)。有什麼辦法可以解決這個問題。 我需要服務定位器,因爲我必須得到配置數據,教條管理等。

我還沒有在module.php中配置getServiceConfig。

+0

請閱讀我的兩個帖子:https://juriansluiman.nl/article/139/zf2-why-a-service-is-not-available-in-your-constructor和https://juriansluiman.nl/article/143 /收集思考關於dic-versus-sl-discussion來給你一些關於這個問題的見解 –

回答

0

我在我的項目中有這樣的類。 您擁有的第一個選項是創建一個包含作爲serviceManager的依賴項的工廠。

然後在你的控制器(不建議報告),或在你的模塊服務注入或通過服務經理這

$this->getServiceLocator()->get('Application\Service\UtilityClass') 

第二種解決方案是檢索您的實用程序類:您的實用程序類是服務至極可以實現了這個接口:

Zend\ServiceManager\ServiceLocatorAwareInterface; 

,並使用該特性(小心你的PHP版本必須是至少> 5.4)

Zend\ServiceManager\ServiceLocatorAwareTrait; 

此解決方案可確保您的服務能夠以您想要的任何方式在班級中使用$this->getServiceLocator()。因爲Zend框架2提供的任何「知曉」接口都是用初始化程序設計的。它會自動爲您添加一些依賴關係。