Symfony 3.4 中的环境特定服务配置

Environment specific services config in Symfony 3.4

我需要在 dev 环境中通过容器访问一些私有服务。

我认为这很简单 - 我只是将它们 public 专门用于 dev 就像这样:

app/config/services.yml:

services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: false

    MyBundle\:
        resource: '../../*'
        exclude: '../../{Entity,Repository,DoctrineMigrations,DependencyInjection,Tests,Util}'

app/config/services_dev.yml:

imports:
- { resource: services.yml }

services:
  _defaults:
    autowire: true
    autoconfigure: true
    public: true

app/config/config_dev.yml

imports:
    - { resource: config.yml }
    - { resource: services_dev.yml }

但这并没有产生预期的结果:服务表现得好像是私有的,配置根本没有合并(例如,当你有参数注入时,sy 大喊我必须明确定义它们,即使父配置已经这样做了).

有很多示例,在 Sy 的默认配置中,针对各种环境会覆盖特定参数,但出于某种原因,服务似乎并非如此。服务配置是否以某种特殊方式处理?我误解了什么吗?这是怎么回事?

P.S。我知道依赖注入,我知道访问容器被认为是不好的做法,这不是问题的重点。请不要这样建议。

它不起作用,因为您的默认值仅适用于您 services_dev.yaml 中定义的服务。这不包括进口。

您可以尝试这样 services_dev.yaml

services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: true

    MyBundle\Services\MyPublicService: ~

这将覆盖服务并使其成为 public。显然,您必须将 class 替换为实际服务。

您不需要导入其他服务。内核将负责加载此 class.