2012-07-25 38 views

回答

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) 
    { 

    } 
} 
+0

我services.yml嘗試這樣做,再次相同的錯誤'{名稱:octrine.event_subscriber,事件:prePersist,更新前}' – user825904 2012-07-25 05:15:07

+1

* d * octrine(typo?),並且不要在您的配置中指定事件。 'getSubscribedEvents'就是這樣。另外,錯誤是什麼? – 2012-07-25 05:19:24

+1

謝謝你,我試過這個,它工作'{{name:doctrine.event_subscriber,connection:default}}'。我也可以在訂閱的事件數組中添加更多事件,如postFlush等。或者它只需要兩個 – user825904 2012-07-25 05:39:55

16

我認爲你可以這樣做:

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

是的,你可以這樣做。它看起來非常簡單直接。 – cezar 2016-04-13 10:48:55