即时补充表格

时间:2018-01-29 14:35:54

标签: php symfony symfony-forms

[设置]

  • Symfony 3.4
  • 包实体:[id,form_id,maretial_id,design_id]
  • 表单实体:[id,form_name]
  • 材质实体:[id,material_name,form_id]
  • 设计实体:[id,design_name,material_id]

[问题]

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

在我的主要表单中,我只能选择package form (form_id)。 一旦选中,通过Ajax请求,我将查找与所选form兼容的每个材料对象:

构建我的控制器,我正在调用我的表单构建器:

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集团?

1 个答案:

答案 0 :(得分:1)

您实际需要的是this

主要步骤是:

  • 在包裹选择框上收听更改事件
  • 从javascript
  • 提交表单
  • 在FormType中,您需要添加订阅者并侦听POST 表格上的活动
  • 在您的订阅者中,您必须创建基于的功能 在包中选择以查询正确的材料
  • 在您的javascript中完成所有操作后,您将加载新的选择框 用新的替换它
  

Symfony Docs示例:

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

现在,您的材料选择框将加载来自订阅者的数据