【问题标题】:Symfony2 forms with multiple dependent fields具有多个依赖字段的 Symfony2 表单
【发布时间】:2015-08-18 02:30:54
【问题描述】:

我正在创建具有以下格式的注册。

如果国家/地区发生变化,那么我需要相应地更改子字段。

1- 国家 状态 城市 郊区

在我的 COMPANY BRANCH 实体中,我将郊区密钥保存为一对多。公司分公司位于哪个郊区。

如果我改变公司集团,那么它应该改变孩子的。

2- 公司集团 公司

在我的 COMPANY BRANCH 实体中,我将公司密钥保存为外键。一对多关系。公司有很多分公司,一个分公司只属于一个公司。

3- 分行地址(文字)

4- 其他一些文本字段。

问题:如何通过嵌入式表单、集合或简单的 Ajax 调用来实现这一点。

我已经尝试过Dependent forms 教程,但我有两个依赖项。国家和公司组。对我来说,很难在我的项目中映射这些东西。如果有人提供详细说明如何做到这一点。那太好了。谢谢,

【问题讨论】:

标签: symfony symfony-forms


【解决方案1】:

在我看来,实现这一点的最佳方法是将您的子字段设置为“禁用”,为每个字段设置一个空值,并将一个 jQuery 侦听器附加到您的每个父下拉列表。

这样,您将能够通过对控制器的 ajax 调用来获取子字段的值,该控制器将向您发送一个 JSON 数组。

例如,您的第一个父/子元素是“Country”和“States”:

<select name="country_list">
    <option value="1">USA</option>
</select>

<select name="states_list">
    <option value="0">-- empty value --</option>
</select>

那么你的 jQuery 应该是这样的:

$("#country_list").change(function() {
    var countryId = $('#country_list').val();
    var callUrl = 'CONTROLLER URL TO CALL';

    // make your ajax call here
    $.ajax({
       url : callUrl,
       type : 'GET',
       dataType : 'json',
       success : function(response){
                     // populate the child list with the JSON values
                     $.each(response,function(key, value) {
                         $('#states_list').append('<option value=' + key + '>' + value + '</option>');
                     });

                     // enable the child list 
                     $('#states_list').prop('disabled', false);
                 }
    });
});

当然你的控制器应该返回一个 JSON 数组。

【讨论】:

  • 我们需要在 Symfony Forms 端做些什么吗?
  • 是的,您需要将“子”字段(州、城市、郊区)设置为“已禁用”。当您在 FormBuilderInterface 中添加字段时,您有一个选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-25
  • 1970-01-01
  • 2015-09-03
  • 1970-01-01
  • 1970-01-01
  • 2016-01-20
相关资源
最近更新 更多