You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony5.4中StofDoctrineExtensions软删除过滤器配置报错

解决Symfony 5.4中stof/doctrine-extensions-bundle软删除过滤器报错问题

问题分析

软删除的deletedAt字段更新正常,但配置过滤器时出现Listener "SoftDeleteableListener" was not added to the EventManager!错误,核心原因是手动重复注册监听器导致冲突,进而让过滤器无法找到正确关联的监听器实例。

解决步骤

1. 移除手动注册的监听器服务

你在services.yaml中手动注册了gedmo.listener.softdeleteable,但stof/doctrine-extensions-bundle会自动为你注册所有启用的扩展监听器(你已经在stof_doctrine_extensions.yaml中开启了softdeleteable: true)。手动注册会导致服务重复,干扰过滤器对监听器的识别。

删除services.yaml中以下内容:

gedmo.listener.softdeleteable:
    class: Gedmo\SoftDeleteable\SoftDeleteableListener
    tags:
        - { name: doctrine.event_subscriber, connection: default }
    calls:
        - [ setAnnotationReader, [ "@annotation_reader" ] ]

2. 确认实体注解配置正确

确保你的实体类上正确添加软删除注解,示例如下:

<?php

namespace App\Entity;

use Gedmo\SoftDeleteable\Traits\SoftDeleteableEntity;
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass=YourEntityRepository::class)
 * @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=false)
 */
class YourEntity
{
    use SoftDeleteableEntity; // 该Trait包含deletedAt字段及相关getter/setter

    // ... 其他实体字段与业务逻辑
}

3. 清除Symfony缓存

缓存可能导致配置未及时生效,执行以下命令清除缓存:

php bin/console cache:clear

4. 保留正确的过滤器配置

你的doctrine.yaml中的过滤器配置是正确的,无需修改,保持现有配置即可:

doctrine:
    orm:
        # ... 其他配置
        filters:
            softdeleteable:
                class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter
                enabled: true

完成以上步骤后,软删除过滤器即可正常工作,不会再出现监听器未添加的错误。

内容的提问来源于stack exchange,提问作者bici

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 17:26:04