我有一个通用的类,用于重用所有模块的函数。我把它放在
ApplicationServiceUtility.php
现在我可以在控制器中创建一个对象
$utilObj = new Utility();
则调用我的函数为$utilObj->myFn();
一切正常。
但我不能得到getServiceLocator()
函数在那里(内部myFn在Utility.php)。有什么办法可以解决这个问题吗?我需要那里的服务定位器,因为我必须获得配置数据,学说管理等。
我在我的项目中有这种类。第一个选项是创建一个工厂,将其作为一个依赖项包含在你的serviceManager中。
然后在你的控制器(不推荐)或模块服务中,通过你的服务管理器注入或检索你的实用程序类,使用这个
$this->getServiceLocator()->get('ApplicationServiceUtilityClass')
第二个解决方案是:你的实用程序类是一个可以实现这个接口的服务:
ZendServiceManagerServiceLocatorAwareInterface;
并使用这些特征(注意你的PHP版本必须至少是> 5.4)
ZendServiceManagerServiceLocatorAwareTrait;
这个解决方案保证你在你的服务中,你可以在你的类中以任何你想要的方法使用$this->getServiceLocator()
。因为Zend框架2提供的任何"感知"接口都是用初始化器设计的。