Php Symfony2:选择字段中的字符串值未绑定到窗体对象
我的应用程序包含一个带有三个选项字段/下拉列表的表单 第一个链接到实体中的“关系”字段,工作正常。 用户应该首先选择一个表链接 第二个和第三个都链接到同一实体中的字符串字段。 通过jQuery,这些选择字段将根据用户在第一个下拉列表中做出的决定填充值 提交表单后,第二个和第三个字段出现错误:它们包含无效输入。当我检查表单对象时,它们的值没有绑定;他们的价值观从未实现 用于从用户收集字符串数据的选择字段如下所示:Php Symfony2:选择字段中的字符串值未绑定到窗体对象,php,jquery,forms,symfony,Php,Jquery,Forms,Symfony,我的应用程序包含一个带有三个选项字段/下拉列表的表单 第一个链接到实体中的“关系”字段,工作正常。 用户应该首先选择一个表链接 第二个和第三个都链接到同一实体中的字符串字段。 通过jQuery,这些选择字段将根据用户在第一个下拉列表中做出的决定填充值 提交表单后,第二个和第三个字段出现错误:它们包含无效输入。当我检查表单对象时,它们的值没有绑定;他们的价值观从未实现 用于从用户收集字符串数据的选择字段如下所示: ->add('sourceName', 'choice', array
->add('sourceName', 'choice', array
(
'label' => 'Choose source name:',
'empty_value' => 'Please choose a table link first...',
'choices' => array(),
'attr' => array('class' => 'extFieldChoice'),
)
<select id="someId" name="someName[sourceName]" required="required"
class="extFieldChoice">
<option value="first">first</option>
<option value="second">second</option>
<option value="manymore">Many more...</option>
</select>
jQuery完成其工作后,html select元素如下所示:
->add('sourceName', 'choice', array
(
'label' => 'Choose source name:',
'empty_value' => 'Please choose a table link first...',
'choices' => array(),
'attr' => array('class' => 'extFieldChoice'),
)
<select id="someId" name="someName[sourceName]" required="required"
class="extFieldChoice">
<option value="first">first</option>
<option value="second">second</option>
<option value="manymore">Many more...</option>
</select>
第一
第二
还有很多。。。
我怀疑可以在最初为空的choices数组中找到错误。然而,不可能用所有可能的选择来填满它,因为它们有数百种。几天前我也遇到了同样的问题,它让我疯狂地想找到一个解决方案,我开始问这个问题,甚至可能已经太晚了,我想分享我找到的解决方案,以防有人遇到同样的问题,我已经找到了三个,但似乎没有一个是完美的解决方案 在我的例子中,我必须保存用户根据zipCode选择的城市。当用户保存一个新地址时,他会编写zipCode,然后通过ajax我用城市选项填写城市选择 我的“选择”字段声明:
$builder->add('city', 'choice', array(
'label' => 'form.city',
'read_only' => true,
'mapped' => false,
'required' => false,
'empty_value' => false,
'choices' => array('none' => 'form.empty.city'),
'data' => null
));
问题在于表单验证需要考虑两个方面:
$('#cityChoice').on({
change: function(){
var optionSelected = $(this).find('option:selected');
$('#city').val(optionSelected.val());
$('#latitude').val(optionSelected.data('lat'));
$('#longitude').val(optionSelected.data('lng'));
}
});
$('#myForm').on({
submit: function(){
$('#mySelect option').remove();
}
});
我已经决定使用第三个选项,但我认为这三个选项都有不好的一面。所以在symfony 4中,我遇到了一个问题,我使用了类似
['string'=>'string']
的数组。唯一对我有效的是:“data”=>false,
。不要添加“mapped”=>false
,我已经在数据库中保存了这个字符串,但只有我在实体中设置为默认值的字符串。