2013-11-01 69 views
5

當其他實體持久或更新時,我需要保留其他實體。因此,我創建了一個靈感來自這篇文章的解決方案:https://stackoverflow.com/a/11054101/1526162未在控制檯命令中調用監聽器

config.yml:

services: 
    transaktion.chain: 
     class: Foo\BarBundle\Listener\Chain 

    transaktion.flush: 
     class: Foo\BarBundle\Listener\Flush 
     arguments: [ @doctrine.orm.entity_manager, @transaktion.chain ] 
     tags: 
      - { name: kernel.event_listener, event: kernel.response, method: onResponse, priority: 5 } 

    transaktion.listener: 
     class: Foo\BarBundle\Listener\TransaktionLogger 
     arguments: [ @transaktion.chain ] 
     tags: 
      - { name: doctrine.event_listener, event: postPersist } 
      - { name: doctrine.event_listener, event: postUpdate } 
      - { name: doctrine.event_listener, event: preRemove } 

的postPersist,postUpdate和刪除前事件將信息添加到鏈,並在結束時,kernel.response啓動沖洗並創建需要額外的entites。一切正常。

但是,當我在控制檯命令中堅持實體時,它不起作用。我認爲沒有kernel.response事件。是否有其他有用的事件與控制器和控制檯命令一起使用?

附加信息:我使用的Symfony 2.3

回答

8

控制檯的事件已經在Symfony的2.3增加了。

快速介紹可以在this blog post找到。

您可以在類Symfony\Component\Console\ConsoleEvents中找到控制檯事件名稱。

const ConsoleEvents::COMMAND = 'console.command'; 
const ConsoleEvents::TERMINATE = 'console.terminate'; 
const ConsoleEvents::EXCEPTION = 'console.exception'; 

只需將console.terminate標記添加到您的訂閱者,你應該沒問題。

tags: 
    - { name: kernel.event_listener, event: kernel.response, method: onResponse } 
    - { name: kernel.event_listener, event: console.terminate, method: onResponse } 
+0

我已經在那上面工作了,但是我找不到標籤條目的正確事件名稱。順便說一句:有沒有文檔中所有可用事件的列表? –

相關問題