2013-02-12 2 views
3

코어 Zend 모듈을 확장하지 않는 모델 클래스가 있습니다. 이 모델은 이전 Zend 프레임 워크 1 애플리케이션에서 가져 왔습니다. 네임 스페이스로 변환하여 메서드를 호출 할 수 있습니다. 내가 가지고있는 문제는 전역 구성을 정의 된 메소드 측면에서 읽는 것입니다. 젠드 프레임 워크 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; 
    } 


    ...... 

} 

내가 젠드 프레임 워크 2에 새로운 오전 친절이를 달성하기 위해 어떤 방법을 제안 해주십시오 얼마나 아래 이다.

위의 설명에서 모델이란 비즈니스 로직이있는 MVC 모델 클래스를 의미합니다.

+0

정확히 당신이 여기에서 "모델"무엇을 의미합니까이 작업을 수행하는 가장 간단한 방법은? 실재? 그것이 문제라면 아마 그렇게해서는 안됩니다. 서비스 로케이터에 대한 참조가있는 곳이라면 어디든지 글로벌 설정에 도달 할 수 있다고 생각하십시오. – Ocramius

+0

@Ocramius이 문제에 대한 응답 주셔서 감사합니다. 모델 클래스 (비즈니스 로직을 가진 클래스)가 있습니다. –

+0

서비스입니까? 또는 데이터 + 논리가 포함 된 엔티티? – Ocramius

답변

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

이를 (소비자의 서비스 위치 지정자에 대한 참조없이) 소비자에 직접 config 객체를 주입하고 있습니다.

다른 방법은 GaGooGl\Http\RequestZend\ServiceManager\ServiceLocatorAwareInterface을 구현하는 것입니다. I personally discourage it하지만 기본적으로 사용자가 Request 개체에 서비스 로케이터에 대한 참조를 내부적으로 보관하도록 허용하므로 런타임에 config 서비스를 검색 할 수 있습니다.

+0

을 module.php 파일에 정의 할 필요가있다. –

+0

모델 클래스에서 설정 객체를 얻는 방법은 사실 나는 당신에게 동의한다. 구성 개체를 반환하는 것입니다. –

+0

서비스 위치 지정자에 액세스하지 않고도 config 객체를 가질 수 없습니다.'Request' 객체에 factory (config) 객체를 넘겨 주거나'Request' 객체에'$ sl '을 넘겨 주면 ('Request' 객체가 그것을 접근하여 'config'' service) – Ocramius

0

체크 this. 두 가지 솔루션이 있습니다. 하나는 서비스 로케이터 인식 인터페이스를 구현하는 것입니다. 또 다른 방법은 모델에 서비스 관리자를 삽입하는 것입니다. 두 가지 모두 서비스 관리자를 통해 모델 객체를 인스턴스화해야합니다.

0

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

저는 이것을 분명히 hack *이라고 부릅니다. – Alex