簡體   English   中英

如何在Doctrine ODM和MongoDbSessionHandler之間共享\\ Mongo實例?

[英]How to share the \Mongo instance between Doctrine ODM and MongoDbSessionHandler?

我正在嘗試使用MongoDB存儲我的會話,並且需要獲得對\\Mongo實例的引用。

但是顯然它沒有被聲明為服務。 相反,學說從包裝器內部創建。

那我該怎么辦呢? 我嘗試了這個:

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添加到日志的記錄程序預處理器沖突,我認為這與會話有關。

有任何想法嗎?

查看Doctrine \\ MongoDB \\ Connection的源代碼, getMongo()方法僅返回$mongo類屬性,該屬性可能會初始化也可能不會初始化。 如果可能,可以在注入連接之前手動調用initialize() 假設您已經為Connection包裝器定義了服務,則應該能夠做到這一點:

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

這將在從其工廠方法構造mongo.connection服務的容器與其返回容器之間調用initialize()方法。

需要注意的其他幾點:

  1. 如果mongo.connection僅將使用一次(注入mongo ),則您可能更喜歡使用匿名服務定義來代替定義另一個服務。
  2. ODM捆綁包已經使用配置中的名稱代替%s來將每個連接定義為doctrine_mongodb.odm.%s_connection 但是,如果您需要在服務定義中添加方法調用,那將無濟於事。
  3. ODM軟件包的最新版本(適用於Symfony 2.1+)將其服務前綴從doctrine.odm.mongodb更改為doctrine_mongodb.odm ,盡管默認文檔管理器存在BC別名。 不過,最好切換到新的前綴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM