You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony 7按环境注入同接口不同服务:when@dev配置失效

问题分析与解决方案

你的配置问题在于主services块已经默认将ExampleAdapterInterface绑定到Mock适配器,导致when@dev里的重复配置完全冗余,不会产生任何实际效果。

修正后的配置(按常见需求)

如果你的预期是:

  • dev环境使用Mock适配器
  • prod/qas环境使用真实适配器

调整配置如下:

services:
    App\Mocks\Adapter\ExampleAdapterMock: ~
    App\Adapter\ExampleAdapter: ~

    # 默认绑定真实适配器(prod/qas环境继承此配置)
    App\Adapter\ExampleAdapterInterface: '@App\Adapter\ExampleAdapter'

when@dev:
    services:
        # 覆盖为Mock适配器
        App\Adapter\ExampleAdapterInterface: '@App\Mocks\Adapter\ExampleAdapterMock'

when@prod: &prod_adapter
    services:
        # 可省略,默认已绑定真实适配器,保留也不影响
        App\Adapter\ExampleAdapterInterface: '@App\Adapter\ExampleAdapter'

when@qas: *prod_adapter

若当前配置逻辑符合你的需求(主配置用Mock,dev保持Mock)

如果你的预期就是默认用Mock,仅prod/qas切换到真实适配器,但配置未生效,排查以下几点:

  • 验证当前环境:执行php bin/console debug:container --env=dev App\Adapter\ExampleAdapterInterface,查看实际绑定的服务
  • 清理缓存:dev环境虽默认不缓存,但手动缓存过的话执行php bin/console cache:clear --env=dev
  • 检查其他配置文件:确认config/packages/dev/services.yaml等文件没有重新绑定该接口

内容的提问来源于stack exchange,提问作者Shudhansh Shekhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 05:55:04