在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。我知道依赖注入,我知道访问容器被认为是不好的做法,这不是问题的重点。请不要这样。
答案 0 :(得分:1)
它不起作用,因为默认设置仅适用于services_dev.yaml
中定义的服务。这不包括进口。
您可以这样尝试services_dev.yaml
:
services:
_defaults:
autowire: true
autoconfigure: true
public: true
MyBundle\Services\MyPublicService: ~
这将覆盖服务并将其公开。显然,您必须用实际的服务替换该类。
您不需要导入其他服务。内核将负责加载此类。