当其他实体被持久化或更新时,我需要保留其他实体.因此,我根据这篇文章创建了一个解决方案: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 }
Run Code Online (Sandbox Code Playgroud)
postPersist,postUpdate和preRemove事件正在向Chain添加信息,最后,kernel.response启动Flush并创建所需的其他entite.一切正常.
但是,当我在控制台命令中持续存在时,它无法正常工作.我认为没有kernel.response事件.是否有其他有用的事件与控制器和控制台命令一起使用?
附加信息:我正在使用Symfony 2.3
我想使用Symfony 2.3将DateTime字段拆分为两个字段(日期和时间).因此,我尝试调整此处的Symfony 2.0解决方案,并对Symfony 2.3进行了必要的更改.
新类型:
class MyDateTimeType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('date', 'date', array(
'label' => 'label.form.date',
'input' => 'datetime',
'widget' => 'single_text',
'format' => 'yyyy-MM-dd',
'error_bubbling' => true
))
->add('time', 'time', array(
'label' => 'label.form.time',
'input' => 'datetime',
'widget' => 'single_text',
'error_bubbling' => true
))
->addViewTransformer(new DateTimeToDateTimeArrayTransformer());
}
public function getDefaultOptions(array $options)
{
return array(
'label' => 'label.form.date',
'error_bubbling' => false
);
}
public function getParent()
{
return 'form';
} …Run Code Online (Sandbox Code Playgroud)