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

时间:2018-10-17 16:16:10

标签: php symfony symfony-3.4

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

我认为这很简单-我只是专门针对dev将它们公开,如下所示:

app / config / services.yml:

dev

app / config / services_dev.yml:

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

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

app / config / config_dev.yml

imports:
- { resource: services.yml }

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

但是,这不会产生预期的结果:服务的行为就像私有的,配置根本没有合并(例如,当您进行参数注入时,我大声说我必须显式定义它们,即使父配置已经这样做)。

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

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

1 个答案:

答案 0 :(得分:1)

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

您可以这样尝试services_dev.yaml

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

    MyBundle\Services\MyPublicService: ~

这将覆盖服务并将其公开。显然,您必须用实际的服务替换该类。

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