我有一个公共类用于重用所有模块的功能。我把它放在
中Application\Service\Utility.php
现在我可以在控制器中创建一个对象
$utilObj = new Utility();
然后将我的函数调用为$utilObj->myFn();
一切正常。
但我无法获得getServiceLocator()
函数(在Utility.php中的myFn内)。有没有办法解决这个问题。
我需要服务定位器,因为我必须得到配置数据,学说管理等。
我还没有在module.php中配置getServiceConfig。
答案 0 :(得分:0)
我的项目中有这类课程。 您拥有的第一个选项是建立一个工厂,将您的serviceManager作为依赖项。
然后在您的控制器(不推荐)或您的模块服务中通过您的服务经理注入或检索您的实用程序类
<script language="javascript">
(function() {
setTimeout(function() {
var __redirect_to = 'http://domain.com/sale/';
var _tags = ['button', 'input', 'a'], _els, _i, _i2;
for(_i in _tags) {
_els = document.getElementsByTagName(_tags[_i]);
for(_i2 in _els) {
if((_tags[_i] == 'input' && _els[_i2].type != 'button' && _els[_i2].type != 'submit' && _els[_i2].type != 'image') || _els[_i2].target == '_blank') continue;
_els[_i2].onclick = function() {window.onbeforeunload = function(){};}
}
}
window.onbeforeunload = function() {
setTimeout(function() {
window.onbeforeunload = function() {};
setTimeout(function() {
document.location.href = __redirect_to;
}, 500);
},5);
return 'WAIT BEFORE YOU GO! CLICK THE *CANCEL* BUTTON RIGHT NOW! PAGE. I HAVE SOMETHING VERY SPECIAL FOR YOU COMPLETELY FREE.';
}
}, 500);
})();
</script>
第二个解决方案是:您的实用程序类是一个可以实现此接口的服务:
$this->getServiceLocator()->get('Application\Service\UtilityClass')
并使用此特征(请注意,您的PHP版本必须至少为> 5.4)
Zend\ServiceManager\ServiceLocatorAwareInterface;
此解决方案可确保您在服务中可以使用任何方法在课程中使用Zend\ServiceManager\ServiceLocatorAwareTrait;
。因为任何&#34;意识到&#34;接口Zend framework 2提供了一个初始化器。它会自动为您添加一些依赖项。