Symfony / Doctrine EntityListener 不起作用

我的 EntityListener 有问题...我的 EntityListener 没有被调用,他不工作,我不知道为什么!我使用 Symfony 3.4 和 Doctrine 2.5。

所以,我的实体:

<?php

namespace TelecomlineBundleEntity;

use DoctrineORMMapping as ORM;

/**
 * LigneTelecom
 *
 * @ORMTable(name="LIGNETELECOM")
 * @ORMEntity(repositoryClass="TelecomlineBundleRepositoryLigneTelecomRepository")
 * @ORMEntityListeners({"TelecomlineBundleDoctrineListenerLigneTelecomListener"})
 */
class LigneTelecom
{
    // etc ...
}

我的实体监听器:

<?php

namespace TelecomlineBundleDoctrineListener;

use TelecomlineBundleEntityLigneTelecom;
use TelecomlineBundleServicemyService;
use DoctrineORMEventLifecycleEventArgs;
use DoctrineORMMapping as ORM;

class LigneTelecomListener
{
    /** @var myService $myService */
    private $myService;    

    public function __construct(myService $myService)
    {
        $this->myService = $myService;
    }    

    /**
     * @ORMPostUpdate()
     *
     * @param LigneTelecom $ligneTelecom
     * @param LifecycleEventArgs $eventArgs
     */
    public function postUpdate(LigneTelecom $ligneTelecom, LifecycleEventArgs $eventArgs)
    {
        $this->myService->calculate($ligneTelecom);
    }  

    // etc ...

我的 service.yml :

telecomline.doctrine.lignetelecom_listener:
    class: "TelecomlineBundleEntityLigneTelecom"
    arguments: ["@telecomline.porte"]
    tags:
        - { name: doctrine.orm.entity_listener }

如果有人有解决方案,我会在 3 小时后阻止它:'(

stack overflow Symfony / Doctrine EntityListener doesn't work
原文答案

答案:

作者头像

您应该指定订阅者想要收听的事件,您使用长形式的定义或从 EventSubscriber 继承并覆盖 getSubscribedEvents

作者头像

Symfony 文档不正确。您不需要 services.yaml 中的配置。只需为实体类添加注释,如 Doctrine docs 所示。

<?php
namespace MyProjectEntity;
use AppEventListenerUserListener;

#[Entity]
#[EntityListeners([UserListener::class])]
class User
{
    // ....
}