Doctrine orm 如何将参数/服务注入到条令实体侦听器中
我正在使用symfony4尝试将一个参数注入到条令实体侦听器中 配置: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
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才需要此注释。我没有看到任何证据表明您可以创建特定于实体的侦听器。我在条令文件里找不到任何东西。你有链接吗?