2013-02-12 109 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