2011-11-01 47 views
1

有人能幫我理解Guilherme Blanco的"ZF1-Doctrine2-ServiceLayer"嗎?ZF1-Doctrine2-ServiceLayer

我正在嘗試使用基本設置來使其運行。但github示例不適合我(我不得不使用serviceLocator.ini中的「服務定位器配置」,而不是現在它似乎正確初始化的「application.ini」)。我無法找到關於如何使用它的任何說明。可能很愚蠢的問題,但我應該如何在控制器中獲得服務?像這樣?

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

我得到異常 「無法找到服務 'TestService的'」。

有人可以提供關於此解決方案的服務邏輯的小指南嗎?非常感謝

回答

1

但是,我無法幫助你實現這個目標,但是,這種架構的原則是分離和抽象持久層。從「愚蠢的」的角度來看,服務定位器(即Dependancy Injection)與服務層的原則無關。兩者都有不同的用途。服務定位器(DiC)可幫助您從應用程序中的任何位置檢索對象(它可以是服務,配置對象或任何您想要的)。

我不是這個靜態實現服務定位器的粉絲,我寧願使用動作助手。


但是,這個異常是因爲你試圖得到一個不存在的'TestService'而引發的。

ServiceLocator通常與設置不同服務的「容器」一起工作。

確保您的「TestService」在Container中正確配置(可以是PHP類,INI,XML或其他)。

看看其他服務,並嘗試瞭解它們是如何工作的。

+0

非常感謝鮑里斯的解釋!真的有助於理解一些事情。至於例外,你也是對的,我必須使用services.ini中指定的名稱「test」而不是類「TestService」的名稱。 – user987220