1

MongoDB を使用してセッションを保存しようとしていますが、\Mongoインスタンスへの参照を取得する必要があります。

しかし、どうやらそれはサービスとして宣言されていません。代わりに、doctrine はラッパー内からそれを作成します。

それで、私はそれについて何ができますか?私はこれを試しました:

services:
    mongo.connection:
        class: MongoDoctrine\MongoDB\Connection
        factory_service: doctrine.odm.mongodb.document_manager
        factory_method: getConnection
    mongo:
        class: Mongo
        factory_service: mongo.connection
        factory_method: getMongo

ただし、null を返すこともあり、ログに request_id を追加するロガー プリプロセッサとも競合します。これは、セッションと関係があると思います。

何か案は?

4

1 に答える 1

5

Doctrine\MongoDB\Connectionのソースを見ると、getMongo()メソッドは単純に$mongoクラス プロパティを返します。これは初期化されている場合とされていない場合があります。可能であればinitialize()、接続を挿入する前に手動で呼び出すことができます。接続ラッパーのサービスを既に定義していることを考えると、これを実行できるはずです。

services:
    mongo.connection:
        class: Doctrine\MongoDB\Connection
        factory_service: doctrine.odm.mongodb.document_manager
        factory_method: getConnection
        calls:
            - [initialize, []]
    mongo:
        class: Mongo
        factory_service: mongo.connection
        factory_method: getMongo

これにより、コンテナがファクトリ メソッドからサービスをinitialize()構築し、それが返される間にメソッドが呼び出されます。mongo.connection

その他の注意事項:

  1. mongo.connectionを ( に挿入するために) 1 回だけ使用する場合はmongo、別のサービスを定義する代わりに、匿名のサービス定義を使用することをお勧めします。
  2. ODM バンドルは、各接続を としてすでに定義しておりdoctrine_mongodb.odm.%s_connection、 の代わりに構成の名前を使用しています%s。ただし、サービス定義にメソッド呼び出しを追加する必要がある場合は役に立ちません。
  3. doctrine.odm.mongodbODM バンドルの最新バージョン (Symfony 2.1+ 用) では、サービス プレフィックスが からに変更されましdoctrine_mongodb.odmたが、デフォルトのドキュメント マネージャーには BC エイリアスが存在します。ただし、新しいプレフィックスに切り替えるのが賢明です。
于 2012-09-10T17:31:53.167 に答える