如何在services.yml文件中添加多个事件作为Doctrine symfony中的事件监听器

Ran*_*ngh 11 php doctrine symfony

我用这个:

my.listener:
        class: Acme\SearchBundle\Listener\SearchIndexer
        tags:
            - { name: doctrine.event_listener, event: postPersist }
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试听这样的两个事件:

- { name: doctrine.event_listener, event: postPersist, preUpdate }
Run Code Online (Sandbox Code Playgroud)

它给出了一个错误.

mas*_*sk8 23

我想你可以这样做:

my.listener:
        class: Acme\SearchBundle\Listener\SearchIndexer
        tags:
            - { name: doctrine.event_listener, event: postPersist }
            - { name: doctrine.event_listener, event: preUpdate }
Run Code Online (Sandbox Code Playgroud)


Adr*_*der 7

您需要一个事件订阅者而不是事件侦听器.

您将服务标记更改为doctrine.event_subscriber,您的类应该实现Doctrine\Common\EventSubscriber.您需要定义一个getSubscribedEventsto satisf EventSubscriber,它返回您想要订阅的事件数组.

<?php

namespace Company\YourBundle\Listener;

use Doctrine\Common\EventArgs;
use Doctrine\Common\EventSubscriber;

class YourListener implements EventSubscriber
{
    public function getSubscribedEvents()
    {
        return array('prePersist', 'onFlush');
    }

    public function prePersist(EventArgs $args)
    {

    }

    public function onFlush(EventArgs $args)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)