Cho*_*per 1 php dependency-injection mongodb symfony doctrine-odm
我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)
但有时它返回null,它也与我的logger预处理器冲突,后者将request_id添加到日志中,我认为这与会话有关.
有任何想法吗?
查看Doctrine\MongoDB\Connection的源代码,该getMongo()方法只返回$mongoclass属性,可以初始化也可以不初始化.如果可能,您可以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
Run Code Online (Sandbox Code Playgroud)
这将调用从其工厂方法initialize()构造mongo.connection服务的容器与返回它之间的方法.
还需注意以下几点:
mongo.connection只使用一次(注入mongo),您可能更喜欢使用匿名服务定义来代替定义另一个服务.doctrine_mongodb.odm.%s_connection,使用其配置中的名称代替%s; 但是,如果需要向服务定义添加方法调用,则无效.doctrine.odm.mongodb为doctrine_mongodb.odm,尽管默认文档管理器存在BC别名.不过,切换到新的前缀是明智的.| 归档时间: |
|
| 查看次数: |
1265 次 |
| 最近记录: |