Мне нужно было сохранять дополнительные объекты, когда другие объекты сохраняются или обновляются. Поэтому я создал решение, вдохновленное этим сообщением: 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. Есть ли другое полезное событие, которое работает с контроллерами и консольными командами?
Дополнительная информация: я использую Symfony 2.3.