在资源文件中声明时,Symfony 4服务被忽略

问题描述 投票:2回答:2

在官方文档(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中声明它,它就可以工作。

对我来说这看起来像个错误,我错过了什么吗?

symfony symfony4
2个回答
2
投票

问题可能是服务被默认服务文件覆盖。其中有一个针对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中的exclude部分,然后将服务发现移动到您的文件中:

services:
    _defaults:
        autowire: true     
        autoconfigure: true

    App\Listeners\:
        resource: '../../src/Listeners/*'

    App\Listeners\BookListener:
        tags:
            - { name: doctrine.event_listener, event: prePersist  }

0
投票

最可能的原因是添加服务时出现冗余,这不允许加载服务。如果你在这里分享你的config / services.yml内容会很棒。

© www.soinside.com 2019 - 2024. All rights reserved.