Doctrine orm 如何将参数/服务注入到条令实体侦听器中

Doctrine orm 如何将参数/服务注入到条令实体侦听器中,doctrine-orm,symfony4,Doctrine Orm,Symfony4,我正在使用symfony4尝试将一个参数注入到条令实体侦听器中 配置: App\EventListener\MyListener: arguments: - "%kernel.cache_dir%" tags: - { name: doctrine.orm.entity_listener } 实体类的注释: @ORM\EntityListeners({"App\EventListener\MyListener"}) 听众: namespace

我正在使用symfony4尝试将一个参数注入到条令实体侦听器中

配置:

App\EventListener\MyListener:
    arguments:
        - "%kernel.cache_dir%"
    tags:
        - { name: doctrine.orm.entity_listener }
实体类的注释:

@ORM\EntityListeners({"App\EventListener\MyListener"})
听众:

namespace App\Eventlistener;
use Doctrine\ORM\Event\LifecycleEventArgs;
class MyListener {

    private $cacheDirectory;

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

    public function postUpdate($entity, LifecycleEventArgs $args)
    {
        ...
    }
}
更新实体时,我得到异常: 函数uu construnt()的参数太少。 第76行传入了0…\vendor\doctrine\doctrine bundle\Mapping\containerawareentitylinerresolver.php,预期正好是1

我还尝试了setter注入,但似乎从未调用setter方法

(这是一个简化的演示-我实际上需要注入一个服务并在postUpdate中使用它)

文件:(但不含DI)


更新:我找到了,但这不适用于symfony 4。

注释掉EntityListener注释。当条令独立运行时使用。在使用框架时,仅标记侦听器就足够了。虽然与您的问题没有直接关系,但使用EventSubscriber将消除对标记的需要。@Cerad感谢您的回答,但我不希望在更新时调用侦听器/订阅者,无论是哪个实体。我需要一个EntityEventListener-Symfony/Doctrine如何知道没有此注释的实体?根据文档,只有旧版本的Doctrine才需要此注释。我没有看到任何证据表明您可以创建特定于实体的侦听器。我在条令文件里找不到任何东西。你有链接吗?