gpt4 book ai didi

symfony - 控制台命令中未调用监听器

转载 作者:行者123 更新时间:2023-12-02 12:17:27 25 4
gpt4 key购买 nike

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

但是,当我在控制台命令中保留实体时,它不起作用。我认为没有 kernel.response 事件。是否还有其他与 Controller 和控制台命令一起使用的有用事件?

附加信息:我正在使用 Symfony 2.3

最佳答案

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 }

关于symfony - 控制台命令中未调用监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19733766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com