Zend framework2 Zend framework 2在模型类中访问全局配置

Zend framework2 Zend framework 2在模型类中访问全局配置,zend-framework2,zend-config,Zend Framework2,Zend Config,我有一个模型类,它不扩展任何核心Zend模块。此模型是从我以前的Zend framework 1应用程序导入的。我可以通过将其转换为名称空间来调用其方法。我遇到的问题是在读取定义的方法中的全局配置 对于控制器,我可以使用下面的代码访问全局配置 $config = $this->getServiceLocator()->get('config'); // This gives a union of global configuration along with module co

我有一个模型类,它不扩展任何核心Zend模块。此模型是从我以前的Zend framework 1应用程序导入的。我可以通过将其转换为名称空间来调用其方法。我遇到的问题是在读取定义的方法中的全局配置

对于控制器,我可以使用下面的代码访问全局配置

 $config = $this->getServiceLocator()->get('config'); 

// This gives a union of global configuration along with module configuration .
但我们应该如何访问模型类中的配置呢。 下面是我的模型课

<?php
namespace test\Http; 

class Request
{

    protected $client;

    public function abc( $c)
    {
        return $something;
    } 


    ......

} 

假设您构建了服务(您的代码看起来像一个服务),您可能会在服务工厂中实例化它(在本例中,我将它放在模块配置中):

通过这种方式,您将配置对象直接注入到其使用者中(在使用者中没有对服务定位器的引用)


另一种方法是在
GaGooGl\Http\Request
中实现
Zend\ServiceManager\ServiceLocatorAwareInterface
。I,但这基本上允许您的
请求
对象在内部保留对服务定位器的引用,因此可以在运行时检索
配置
服务。

检查。它有两种解决方案。一个是实现服务定位器感知接口。另一种方法是将服务管理器注入到您的模型中。对于这两种方法,都需要通过服务管理器实例化模型对象。

最简单的方法

$config = new \Zend\Config\Config( include APPLICATION_PATH.'/config/autoload/global.php' ); 

你说的“模特”到底是什么意思?实体?如果问题是这样的话,你可能不应该那样做。考虑到你有一个对服务定位器的引用,就可以到达全局配置……@ OrgMusiu谢谢你对此做出回应,我有一个模型类(只是一个具有商业逻辑的类),所以它是一个服务吗?或者只是一个包含数据的实体+一些逻辑?@Ocramius,只是一个实体,我不知道你所说的实体是什么意思,但根据我的理解,它是一个独立的业务类别,实体和服务的定义见中的“DDD的构建块”一节;)我们需要在module.php文件中定义这个吗?如何在model类中获取config对象?事实上,我同意你说的是返回config对象。没有访问服务定位器的权限,你就不能拥有config对象。要么将工厂中的config对象(我上面写的闭包)传递给
请求
对象,要么将
$sl
传递给
请求
对象(这样
请求
对象就可以访问它以获得
'config'
服务)我不需要扩展Zend FORM或AbstractTableGatewa,因为我没有使用它们,是否有Zend模块可以扩展,如果没有扩展,我无法实现我猜它会抛出错误,你错了这将返回模块配置,而不是全局配置,我没有得到全局配置。我肯定会称之为黑客。我会说是工作黑客,不是吗?也许
include_once
和not
include
会更好。也许使用工厂加载配置文件会更好@看见
$config = new \Zend\Config\Config( include APPLICATION_PATH.'/config/autoload/global.php' );