3

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

如果是控制器,我可以使用以下代码访问全局配置

 $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 框架 2 的新手,请建议任何方法来实现这一点。

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

4

3 回答 3

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);
                },
            ),
        );
    }
}

这样,您就可以将配置对象直接注入其使用者(无需在使用者中引用服务定位器)

另一种方法是Zend\ServiceManager\ServiceLocatorAwareInterface在您的GaGooGl\Http\Request. 我个人不鼓励这样做,但这基本上允许您让您的Request对象在内部保留对服务定位器的引用,因此可以config在运行时检索服务。

于 2013-02-12T17:37:08.057 回答
1

最简单的方法

$config = new \Zend\Config\Config( include APPLICATION_PATH.'/config/autoload/global.php' ); 
于 2015-09-09T06:40:18.240 回答
0

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

于 2013-02-12T22:57:59.693 回答