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.
我需要在 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.