Symfony2表单动态生成,表单提交抛出预设置数据错误

Symfony2表单动态生成,表单提交抛出预设置数据错误,symfony,symfony-forms,event-listener,Symfony,Symfony Forms,Event Listener,我试图创建一个动态表单,很像Symfony的示例 我有一个父表单类型“AttributeType”,它包含一组“AttributeDetailType”。子AttributeDetailType()表单是我设置侦听器的地方: $attributeDetailFields = $options['attributeDetailFields']; $builder ->add('attributeDetailField', 'entity', array(

我试图创建一个动态表单,很像Symfony的示例

我有一个父表单类型“AttributeType”,它包含一组“AttributeDetailType”。子AttributeDetailType()表单是我设置侦听器的地方:

$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)。我现在被这个困住了。。你找到解决办法了吗?