在资源文件中声明时忽略 Symfony 4 服务
Symfony 4 services ignored when declared inside a resource file
按照官方文档 (here),我决定将我的 services.yaml 配置文件拆分成几个文件以便于阅读。
然后我创建了一个文件 config/services/doctrine_listeners.yaml 包含这个单一的服务定义:
services:
_defaults:
autowire: true
autoconfigure: true
App\Listeners\BookListener:
tags:
- { name: doctrine.event_listener, event: prePersist }
然后我在 config/services.yaml 中像这样导入它:
imports:
- { resource: 'services/doctrine_listeners.yaml' }
当这样进行时,永远不会实例化侦听器。如果我直接在 config/services.yaml 中声明它,它就可以工作。
这对我来说像是一个错误,我是不是漏掉了什么?
问题可能是服务被默认服务文件覆盖了。其中有一个针对 src:
中所有 类 的 PSR-4 服务发现
# makes classes in src/ available to be used as services
# this creates a service per class whose id is the fully-qualified class name
App\:
resource: '../src/*'
exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'
这也将注册您的侦听器,看起来这将覆盖您文件中的先前配置。
我建议将 Listeners
添加到 services.yaml
中的排除部分,然后将它们的服务发现移动到您的文件中:
services:
_defaults:
autowire: true
autoconfigure: true
App\Listeners\:
resource: '../../src/Listeners/*'
App\Listeners\BookListener:
tags:
- { name: doctrine.event_listener, event: prePersist }
最可能的原因是添加服务时出现冗余,不允许加载服务。如果你在这里分享你的 config/services.yml 内容就太好了。
按照官方文档 (here),我决定将我的 services.yaml 配置文件拆分成几个文件以便于阅读。
然后我创建了一个文件 config/services/doctrine_listeners.yaml 包含这个单一的服务定义:
services:
_defaults:
autowire: true
autoconfigure: true
App\Listeners\BookListener:
tags:
- { name: doctrine.event_listener, event: prePersist }
然后我在 config/services.yaml 中像这样导入它:
imports:
- { resource: 'services/doctrine_listeners.yaml' }
当这样进行时,永远不会实例化侦听器。如果我直接在 config/services.yaml 中声明它,它就可以工作。
这对我来说像是一个错误,我是不是漏掉了什么?
问题可能是服务被默认服务文件覆盖了。其中有一个针对 src:
中所有 类 的 PSR-4 服务发现# makes classes in src/ available to be used as services
# this creates a service per class whose id is the fully-qualified class name
App\:
resource: '../src/*'
exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'
这也将注册您的侦听器,看起来这将覆盖您文件中的先前配置。
我建议将 Listeners
添加到 services.yaml
中的排除部分,然后将它们的服务发现移动到您的文件中:
services:
_defaults:
autowire: true
autoconfigure: true
App\Listeners\:
resource: '../../src/Listeners/*'
App\Listeners\BookListener:
tags:
- { name: doctrine.event_listener, event: prePersist }
最可能的原因是添加服务时出现冗余,不允许加载服务。如果你在这里分享你的 config/services.yml 内容就太好了。