2011-11-08 76 views
1

後,我試圖自舉 所有這些服務依賴於數據庫Zend_Db的過程中設置了服務定位數據庫適配器和每個服務注入了上創建所需的數據映射器。Zend公司創建之前或的Bootstrap

看起來有點像這樣:

$alertService = new WORK_Alert_Service_Service(array("AlertMapper" => new Model_Alert_Mapper(), 
                  "AlertUserSubscriptionMapper" => new Model_Alert_User_Subscription_Mapper())); 

    $emailerService = new WORK_Emailer_Service_Service(
     array("AccountMapper" => new Model_Emailer_Email_Account_Mapper())); 

    $encryptionService = new WORK_Encryption_Service_Service(); 

    $services = array( 
     $alertService, 
     $emailerService, 
     $encryptionService 
    ); 

    WORK_ServiceLocator::regiserServices($services); 

因此,我發現的是,我得到以下錯誤

problemNo適配器發現Model_Emailer_DbTable_EmailAccounts

這是什麼原因發生在電子郵件服務器上,但不是警報服務是 電子郵件服務器連接到數據庫並獲取所有可用的電子郵件帳戶,並將它們存儲在建築以後使用的對象(維護映射對象,這樣的帳戶列表可以被操縱/清除,如果需要復位)。

是否Zend_Db的適配器獲得引導過程後產生的? 如果是的話,是否有可能推動這一進展?

可我解決這個問題通過移動這些用於各個模塊的引導文件?

回答

1

我試圖自舉

我假定然後,上面的代碼中出現的自舉_init*方法期間建立一個服務定位器。如果是這樣,只要把這個在你的方法開始

protected function _initServices() 
{ 
    $this->bootstrap('db'); 

    // and the rest 

http://framework.zend.com/manual/en/zend.application.theory-of-operation.html#zend.application.theory-of-operation.bootstrap.dependency-tracking

+0

這正是我需要謝謝。 是的,你是正確的_init方法。 _init方法是否按照在引導程序中寫入的順序執行? – user966936

+0

它使用['get_class_method(0函數)'](http://php.net/manual/en/function.get-class-methods.php)在內部這似乎在聲明的順序返回它們。我不知道它是如何整合與資源插件,因此需要引導的依賴關係的洞察 – Phil

+0

十分感謝這個順序。 – user966936