首页 > 解决方案 > 如何实现 dotrine 实体事件监听器

问题描述

我正在使用 Symfony 4.4,起初我想检查我发现的学说版本:在作曲家中:

doctrine/orm": "^2.4.5

在 symfony.lock 中:

"doctrine/orm": {
    "version": "v2.7.0"
},

我必须信任哪一个?

所以主要问题是我正在尝试实现一个学说实体侦听器,但它对我不起作用:

应用\实体\管理员:

/**
 * @ORM\Entity(repositoryClass="App\Repository\AdminRepository")
 *
 * @ORM\EntityListeners({"AdminListener"})
 */
 class Admin implements UserInterface

服务.yaml:

admin_listener:
    class: App\EventListener\Doctrine\AdminListener
    tags:
        -
            name: doctrine.orm.entity_listener
            event: preRemove
            entity: App\Entity\Admin
            method: preRemove
            connection: 'default'

App\EventListener\Doctrine\AdminListener:

namespace App\EventListener\Doctrine;
use Doctrine\Persistence\Event\LifecycleEventArgs;

class AdminListener
{
    public function preRemove(Admin $admin, LifecycleEventArgs $event)
    {
        dump($admin);
        dd($event);
    }

}

安慰:

>bin/console debug:event-dispatcher doctrine.orm.entity_listener
#output:                                                                        
 [WARNING] The event "doctrine.orm.entity_listener" does not have any     
           registered listeners.    

标签: symfonydoctrine-ormsymfony-4.4

解决方案


我有一个 DataPersister (API平台组件)在尝试 Doctrine 级别之前不允许删除的问题,因此我认为事件侦听器不起作用。否则,事件侦听器正在工作,并且有很多替代方法可以做到:

https://symfony.com/doc/4.4/doctrine/events.html


推荐阅读