Symfony2表单动态生成,表单提交抛出预设置数据错误
我试图创建一个动态表单,很像Symfony的示例 我有一个父表单类型“AttributeType”,它包含一组“AttributeDetailType”。子AttributeDetailType()表单是我设置侦听器的地方:Symfony2表单动态生成,表单提交抛出预设置数据错误,symfony,symfony-forms,event-listener,Symfony,Symfony Forms,Event Listener,我试图创建一个动态表单,很像Symfony的示例 我有一个父表单类型“AttributeType”,它包含一组“AttributeDetailType”。子AttributeDetailType()表单是我设置侦听器的地方: $attributeDetailFields = $options['attributeDetailFields']; $builder ->add('attributeDetailField', 'entity', array(
$attributeDetailFields = $options['attributeDetailFields'];
$builder
->add('attributeDetailField', 'entity', array(
'class' => 'RelayRiseBundle:AttributeDetailField',
'choices' => $attributeDetailFields,
'property' => 'name'
));
我的侦听器将根据用户选择的“attributeDetailField”使用字段类型填充字段“value”:
$formModifier = function (FormInterface $form, AttributeDetailField $attributeDetailField = null) {
print($attributeDetailField->getName());
if($attributeDetailField->getDataType()->getValue() === 'date') {
$form->add('value', 'collot_datetime', array('pickerOptions' =>
array("format" => "mm/dd/yyyy",
"todayBtn" => "linked",
"autoclose" => true,
"minView" => "month",
"todayHighlight" => true),
));
} else {
$form->add('value', 'text');
}
}
所以我有PRE_SET_数据和POST_SUBMIT事件监听器
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function (FormEvent $event) use ($formModifier) {
if (null != $event->getData()) {
$data = $event->getData();
$formModifier($event->getForm(), $data->getAttributeDetailField());
}
}
);
$builder->get('attributeDetailField')->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) use ($formModifier) {
if (null != $event->getData()) {
$attributeDetailField = $event->getForm()->getData();
$formModifier($event->getForm()->getParent(), $attributeDetailField);
}
}
);
填充表单时,PRE_FORM_数据侦听器工作得非常好。问题是当我对控制器执行AJAX回调时,会触发一个表单->提交。然后调用POST_SUBMIT监听器和PRE_FORM_数据监听器,我得到以下错误:
“检测到一个循环。PRE_SET_DATA事件的侦听器不能调用setData()。您应该在FormEvent对象上调用setData()。”
如何通过Ajax提交表单,触发POST_submit侦听器,而不抛出PRE_SET_数据错误 我突然也遇到了这个问题,工作代码在没有更改的情况下突然无法工作。你找到解决办法了吗?我也遇到了同样的问题
ParentType
的集合字段为ChildType
<代码>子类型由两个字段组成现有元素
和数量
。我希望现有元素的列表取决于用户的选择(ajaxcall&co)。我现在被这个困住了。。你找到解决办法了吗?