[英]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()
方法。
需要注意的其他幾點:
mongo.connection
僅將使用一次(注入mongo
),則您可能更喜歡使用匿名服務定義來代替定義另一個服務。 %s
來將每個連接定義為doctrine_mongodb.odm.%s_connection
。 但是,如果您需要在服務定義中添加方法調用,那將無濟於事。 doctrine.odm.mongodb
更改為doctrine_mongodb.odm
,盡管默認文檔管理器存在BC別名。 不過,最好切換到新的前綴。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.