加载一个页面后,选择字段是用jquery动态完成的,但是发布数据没有在$form-〉getData()中加载。经过一些搜索,选项是添加一个隐藏字段,并用javascript添加值。我想知道是否存在另一个选项。
这是一个动作:
$form = $this->createFormBuilder()
->add('country','file')
->add('admcod2','file')
->add('isocountry', 'choice', array('empty_value' => 'select country'))
->add('iso','hidden')
->getForm();
选项中包含jquery
$("#form_isocountry").jeoCountrySelect({
callback: function () {
$("#form_isocountry").removeAttr('disabled');
}
});
//this add the value to a hidden field...
$("#form_isocountry").change(function() {
$("#form_iso").val($("#form_isocountry").val());
})
所以symfony无法识别动态选择中加载的选项。var_dump($form-〉getData())显示填充的隐藏字段,但不显示选择字段。
谢谢。
2条答案
按热度按时间tquggr8v1#
我认为
choice
不是这个用例的正确字段类型,因为从表单字段的Angular 来看,可能的选择列表是空的。因此提交的值永远不会有效(除非是空的)。我可以建议您使用
hidden
作为此字段的类型,或者使用choice
类型指定表单字段的选择列表。sulc1iza2#
我已经用这种方式使用
ChoiceType
字段。我认为这是合乎逻辑的选择。它的主要问题是(以及默认的EntityToIdTransformer
或EntityChoiceList
)是它水合每个可能的选项以便选择一个,这在某些情况下是多余的。你可能需要编写自己的转换器来防止这种情况。我使用 AJAX 在页面加载后将数据加载到选择中。它使页面更小,加快了页面处理时间,并使我能够更精确地缓存每组选项。这是针对Symfony 2.0的。它运行良好,我们在一个页面上放置了一堆Chosen字段,其中包含4000多个选项(尽管它只在用户与小部件交互时创建Chosen元素)。现在的限制是浏览器内存。
联系人实体类型
连接至变压器
这是内置
EntityToIdTransformer
的变体。