如何为特定Oracle连接配置Doctrine\DBAL\OCI8初始化会话中间件?
仅为Oracle连接配置OCI8初始化中间件
要解决MySQL因全局加载Oracle专属中间件报错的问题,你不需要全局注册Doctrine\DBAL\Driver\OCI8\Middleware\InitializeSession,而是针对特定的Oracle连接单独配置中间件,具体操作如下:
- 先移除全局范围内的该中间件注册(如果之前有配置的话)
- 在Doctrine的连接配置文件中,找到你的Oracle连接节点(比如你示例里的
oracleBase),在该节点下单独添加middlewares配置:
# 示例为Symfony环境下的配置文件(config/packages/doctrine.yaml) doctrine: dbal: connections: # MySQL连接配置,无需添加OCI8相关中间件 mysqlBase: url: '%env(DATABASE_URL_MYSQL)%' driver: pdo_mysql # ...其他MySQL连接配置项 # Oracle连接配置,单独挂载OCI8初始化中间件 oracleBase: url: '%env(DATABASE_URL_ORACLE)%' driver: oci8 middlewares: - Doctrine\DBAL\Driver\OCI8\Middleware\InitializeSession # ...其他Oracle连接配置项
这种配置方式下,只有oracleBase这个Oracle连接会加载并执行该初始化中间件,MySQL连接不会触发相关逻辑,也就不会出现报错了。
对比旧的监听器机制,新的中间件是按连接维度独立配置的,不需要通过标签指定目标连接,直接在对应连接的配置中声明要使用的中间件即可,更贴合Doctrine DBAL的新架构设计。
内容的提问来源于stack exchange,提问作者Marcin L
相关产品推荐
相关产品推荐

