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

时间:2012-07-25 04:51:52

标签: php symfony doctrine

我正在使用它:

my.listener:
        class: Acme\SearchBundle\Listener\SearchIndexer
        tags:
            - { name: doctrine.event_listener, event: postPersist }

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

- { name: doctrine.event_listener, event: postPersist, preUpdate }

它会出错。

2 个答案:

答案 0 :(得分:23)

我认为你可以这样做:

my.listener:
        class: Acme\SearchBundle\Listener\SearchIndexer
        tags:
            - { name: doctrine.event_listener, event: postPersist }
            - { name: doctrine.event_listener, event: preUpdate }

答案 1 :(得分:7)

您需要一个事件订阅者而不是事件监听器。

您将服务代码更改为doctrine.event_subscriber,您的班级应该实施Doctrine\Common\EventSubscriber。您需要定义getSubscribedEvents以满足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)
    {

    }
}