2013-02-12 112 views
3

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

在控制器的情况下,我能使用访问下面的代码

$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; 
    } 


    ...... 

} 

我是新来的Zend Framework 2请您提出的任何方法来实现这一目标。

在上面的描述中,模型意味着(MVC模型类),它具有一些业务逻辑。

+0

究竟你“模型”在这里的意思是什么简单的方法?实体?如果这是个问题,你可能不应该那样做。考虑到你可以到达全局配置,只要你有一个服务定位器的引用... – Ocramius 2013-02-12 17:25:25

+0

@Ocramius感谢您对此作出回应,我有一个模型类(只是一个类有业务逻辑) – 2013-02-12 17:27:06

+0

那么它是一个服务?或者只是一个包含数据+一些逻辑的实体? – Ocramius 2013-02-12 17:29:21

回答

3

假设你建立你的服务(你的代码看起来像一个服务),您可能会初始化它在服务制造厂(在这种情况下,我已经把它的模块配置):

class MyModule 
{ 
    public function getServiceConfig() 
    { 
     return array(
      'factories' => array(
       'my_request_object' => function (
        \Zend\ServiceManager\ServiceLocatorInterface $sl 
       ) { 
        $config = $sl->get('config'); 

        return new \GaGooGl\Http\Request($config); 
       }, 
      ), 
     ); 
    } 
} 

这方式,你直接在其消费者注入配置对象(没有参考消费者的服务定位器)

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

+0

我们是否需要在module.php文件中定义此 – 2013-02-12 17:40:42

+0

如何获取模型类中的配置对象实际上我同意你正在说要返回配置对象。 – 2013-02-12 17:41:48

+0

无法访问服务定位器就无法获得配置对象。将工厂中的配置对象(我上面写的闭包)传递给Request对象,或者将$ sl传递给Request对象(这样Request对象就可以访问它以获取''config''服务) – Ocramius 2013-02-12 18:59:49

0

检查this。它有两个解决方案。一种是实现了服务定位器感知界面。另一种方法是将服务经理注入您的模型。对于这两者,你需要通过服务管理器实例化你的模型对象。

0

做到这一点

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

我肯定会称这是一个*破解*。 – Alex 2015-11-27 09:56:35