侦听器未在控制台命令中调用

时间:2013-11-01 19:12:18

标签: symfony doctrine-orm symfony-2.3

当其他实体被持久化或更新时,我需要保留其他实体。因此,我根据这篇文章创建了一个解决方案: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和preRemove事件正在向Chain添加信息,最后,kernel.response启动Flush并创建所需的其他entite。一切正常。

但是,当我在控制台命令中持续存在时,它无效。我认为没有kernel.response事件。是否有其他有用的事件与控制器和控制台命令一起使用?

其他信息:我使用的是Symfony 2.3

1 个答案:

答案 0 :(得分: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 }