Php 如何覆盖自动连线symfony服务?
我正在做一个Symfony 4项目,我读过 我的问题不是自动布线,而是导入的文件 表示可以在许多文件中导入服务 在我的项目中,我在Php 如何覆盖自动连线symfony服务?,php,symfony,autowired,symfony4,Php,Symfony,Autowired,Symfony4,我正在做一个Symfony 4项目,我读过 我的问题不是自动布线,而是导入的文件 表示可以在许多文件中导入服务 在我的项目中,我在config文件夹中有service.yaml,它导入services文件夹中的所有服务 imports: - { resource: './services/admin.yaml'} - { resource: './services/front.yaml'} - { resource: './services/core.yaml' } s
config
文件夹中有service.yaml
,它导入services
文件夹中的所有服务
imports:
- { resource: './services/admin.yaml'}
- { resource: './services/front.yaml'}
- { resource: './services/core.yaml' }
services:
_defaults:
autowire: true
autoconfigure: true
所以我需要重写服务自动连接,因为它在构造函数中有两个字符串,我需要手动连接这些参数
extranet.form.data_subscriber.remove_empty_reference_fields:
class: Extranet\Admin\Form\DataSubscriber\RemoveEmptyFieldsSubscriber
arguments:
$collectionName: references
$childName: name
Extranet\Admin\Form\DataSubscriber\RemoveEmptyFieldsSubscriber: '@extranet.form.data_subscriber.remove_empty_reference_fields'
Extranet\Admin\Form\DataSubscriber\RemoveEmptyFieldsSubscriberInterface: '@Extranet\Admin\Form\DataSubscriber\RemoveEmptyFieldsSubscriber'
但是现在,如果我将此服务直接放在文件末尾的services.yaml
中,它就可以工作了
我的问题是,如何在services.yaml
如果你能帮我,请告诉我,谢谢
编辑
我已经试着把导入部分放在服务的末尾。yaml文件几天前我遇到了一个类似的问题,找到了一个更好的解决方案:装饰服务,然后它会自动恢复。你能给我举个例子吗?或者是通过symfony文档的链接?例如OK谢谢,我在我的服务配置中添加了装饰选项,看起来很有效。我必须承认,让类和装饰选项指向同一个类有点奇怪。我认为核心问题是,您的原始config/services.yaml文件中仍然有资源:“../src/*”部分。这会导致autowire连接它遇到的任何类,即使其中一个导入的服务文件也会处理它。当使用多个服务文件时,您通常需要完全删除此部分,或者使用exclude进行处理。下面是一个例子:几天前,我遇到了一个类似的问题,并找到了更好的解决方案:改为装饰服务,然后自动恢复。你能给我举个例子吗?或者是通过symfony文档的链接?例如OK谢谢,我在我的服务配置中添加了装饰选项,看起来很有效。我必须承认,让类和装饰选项指向同一个类有点奇怪。我认为核心问题是,您的原始config/services.yaml文件中仍然有资源:“../src/*”部分。这会导致autowire连接它遇到的任何类,即使其中一个导入的服务文件也会处理它。当使用多个服务文件时,您通常需要完全删除此部分,或者使用exclude进行处理。以下是一个例子: