在Symfony 2.6中,我使用的是未映射的实体表单类型:
$form
->add(
'myEntity', // Form field name
'entity',
[
'mapped' => false, // Not mapped
'class' => 'MyVendor\MyBundle\Entity\MyEntity',
'choices' => $MyEntityCollection, // list of MyEntity
'property' => 'name',
'empty_value' => 'Please select MyEntity',
'empty_data' => null,
'attr' => [
'label' => 'My label'
]
]
);
这允许用户正确选择MyEntity项目或将其留空。根据这一点,如果选择了任何值,我将添加一个EventSubscriber来修改preSubmitted数据,如果没有选择,我会保持原样。
这是eventSubscriber:
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents()
{
return [
FormEvents::PRE_SUBMIT => 'preSubmitData'
];
}
/**
* @param FormEvent $event
*/
public function preSubmitData(FormEvent $event)
{
if( null === ($entity = $event->getForm()->get( 'myEntity' )->getData() ) ){
return;
}
// Set value if field has been defined
$event
->getForm()
->setData( $entity )
;
}
如果用户选择空白以外的选项,则在调试preSubmitData函数时:
我的问题是:
提前致谢!
修改
总体而言,在我的全球形式(此处未描述的其他字段)中,我有2个依赖字段:
希望现在更清楚了。
答案 0 :(得分:0)
好的,因为我们在 preSubmit 事件上,所以它给出了null,这里发送的数据尚未映射到实体中。
将事件更改为提交会根据需要为映射实体提供。