2011-11-08 3 views
1

ブートストラップ中にサービスロケータを設定しようとしています これらのサービスはすべてZend_Dbデータベースに依存しており、各サービスには作成時に必要なデータマッパーが組み込まれています。だから、zendはブートストラップの前または後に作成されたdbアダプタです

$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

これが理由で見つかった次のエラーを取得することです:

は、このような小さなものになりますemailerサービスでは発生しますが、警告サービスでは発生しません。 emailerサービスが接続しています利用可能なすべての電子メールアカウントを取得し、オブジェクトに格納して後で建設時に使用できるようにします(必要に応じてアカウントリストを操作/クリアしてリセットできるようにマッパーオブジェクトを維持します)。

ブートストラップ処理後に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_methods()'](http://php.net/manual/en/function.get-class-methods.php)を使って、宣言の順にそれらを返すようです。私はリソースプラグインとこ​​の順序をどのように統合するのか分からないので、依存関係をブートストラップする必要があります – Phil

+0

洞察力に感謝します。 – user966936

関連する問題