即时补充表格

Supplement form on the fly

[设置]

[问题]

我想知道如何使用来自 Ajax 请求的数据来补充表单。

在我的主窗体中,我只能 select select package form (form_id)。 一旦它被 selected,通过 Ajax 请求,我将查找与 selected form:[=14 兼容的每个 material 对象=]

表单我的控制器,我正在调用我的表单生成器:

FormMaterialsType.php

public function buildSupplementForm(FormBuilderInterface $builder, array $options) {
    $builder
        ->add('material', EntityType::class, array(
            'class' => 'AppBundle\Entity\Material',
            'choice_label' => 'Material',
            'query_builder' => function(EntityRepository $er) {
                return $er->createQueryBuilder('m')
                          ->where('m.form= :form');
                          ->setParameters(array(
                              new Parameter('form', $options['form_id']),
                ))
            },
            'empty_data' => null,
            'required' => true)
        );
}

问题是我要填写完整的表格。我怎样才能只获得 select 集团?

你真正需要的是this

主要步骤是:

  • 监听包裹 select 盒子上的更改事件
  • 从 javascript
  • 提交表格
  • 在您的 FormType 中,您需要添加订阅者并监听 POST 您表单上的活动
  • 在您的订阅者内部,您必须创建基于以下内容的功能 包中的 selection 查询正确的 materials
  • 在您的 javascript 中完成所有这些之后,您加载新的 select 框 用新的替换它

Symfony Docs Example:

$("#material_select_box_id").replaceWith($(html).find('#material_select_box_id'));

现在您的 material select 框将加载来自订阅者的数据