2011-11-01 4 views
1

Guilherme Blanco의 "ZF1-Doctrine2-ServiceLayer"을 이해할 수 있도록 도와 줄 사람이 있습니까?ZF1-Doctrine2-ServiceLayer

기본 설정을 사용하여 실행하려고합니다. 하지만 github 샘플이 제대로 작동하지 않습니다 (serviceLocator.ini에서 "Service Locator Configuration"을 사용해야하고 "application.ini"가 아니라 이제 제대로 초기화 된 것 같습니다). 나는 그것을 사용하는 방법에 대한 모든 메모를 찾을 수 없습니다. 아마 어리석은 질문 일지 모르지만 컨트롤러에서 서비스를 정확히 얻으려면 어떻게해야합니까? 이 같은?

SomeController extends Zend_Controller_Action { 
    public function someAction() 
    { 
     $serviceLocator = Zend_Registry::get('serviceLocator'); 
     $serviceLocator->getService('TestService'); 
    } 
} 

예외가 발생했습니다. '서비스'TestService '를 찾을 수 없습니다. "

누군가이 솔루션의 서비스 논리에 대해 약간의 안내를 제공해 주시겠습니까? 고마워요 많이

답변

1

나는 그 구현에 많은 도움을 줄 수는 없지만 그러한 아키텍처의 원칙은 분리 층과 추상화 층을 분리하는 것입니다. "바보 같은" 시점에서 Service Locator (즉, Dependancy Injection)는 서비스 계층의 기본 정보와 아무 관련이 없습니다. 둘 다 다른 용도로 사용됩니다. Service Locator (DiC)는 응용 프로그램의 어느 곳에서나 Object (서비스, Configuration 객체 또는 원하는 모든 것)를 가져올 수 있도록 도와줍니다.

저는 서비스 헬기의 정적 구현에 대한 팬이 아닙니다. 여기서는 액션 헬퍼를 사용하고 싶습니다.


하지만 'TestService'가 없기 때문에이 예외가 throw됩니다.

ServiceLocator는 일반적으로 다른 서비스를 설정하는 "컨테이너"와 함께 작동합니다.

컨테이너에 "TestService"가 올바르게 구성되어 있는지 확인하십시오 (PHP 클래스, INI, XML 등이 될 수 있음).

다른 서비스를 살펴보고 어떻게 작동하는지 이해하려고 시도하십시오.

+0

대단한 설명을 해주신 Boris! 정말 몇 가지를 이해하는 데 도움이 .. 그리고 당신이 옳았다는 예외에 대해서는 services.ini "test"클래스의 이름이 아닌 "test"에 지정된 이름을 사용해야했습니다. – user987220