Symfony/Doctrine EntityListener构造函数依赖注入失败求助
解决方案
确保
service.yaml中监听器服务配置开启自动注入并正确标记Doctrine实体监听器标签:services: App\Event\EventListener\Vendor\VendorListener: autowire: true tags: - { name: doctrine.orm.entity_listener, entity: App\Entity\Vendor, event: postPersist }必须开启
autowire: true,让Symfony依赖注入容器负责实例化监听器并自动注入构造函数依赖。检查实体类上的
@EntityListeners注解,不要设置lazy: false:/** * @EntityListeners({App\Event\EventListener\Vendor\VendorListener::class}) */ class Vendor { // 实体字段与方法 }当
lazy设为false时,Doctrine会直接实例化监听器,绕过Symfony的DI容器,导致无法注入服务依赖。清除Symfony缓存:
php bin/console cache:clear缓存可能导致配置变更未生效,清除后再测试。
验证
MessageBusInterface服务存在:
运行以下命令确认目标服务已注册:php bin/console debug:container MessageBusInterface如果使用的是特定总线(如事件总线、命令总线),替换为对应服务ID(如
event_bus或command_bus)。
问题核心:Doctrine实体监听器默认是懒加载模式(由Symfony容器管理实例),若配置不当导致Doctrine直接实例化监听器,就会跳过依赖注入流程,触发构造函数参数不足的错误。
内容的提问来源于stack exchange,提问作者YanKlinkenick
相关产品推荐
相关产品推荐

