zf2

时间:2015-09-28 09:22:14

标签: php zend-framework zend-framework2 service-locator

我有一个公共类用于重用所有模块的功能。我把它放在

Application\Service\Utility.php 

现在我可以在控制器中创建一个对象

$utilObj = new Utility();

然后将我的函数调用为$utilObj->myFn();

一切正常。

但我无法获得getServiceLocator()函数(在Utility.php中的myFn内)。有没有办法解决这个问题。 我需要服务定位器,因为我必须得到配置数据,学说管理等。

我还没有在module.php中配置getServiceConfig。

1 个答案:

答案 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提供了一个初始化器。它会自动为您添加一些依赖项。