我的应用程序包含一个带有三个选择字段/下拉列表的表单。
第一个链接到实体中的“关系”字段,并且工作正常。
用户应该首先选择一个表链接。
第二个和第三个都链接到同一实体中的字符串字段。
通过jQuery,这些选择字段将根据用户在第一个下拉列表中做出的决定填充值。
提交表单后,第二个和第三个字段有错误:它们包含无效的输入。当我检查表单对象时,它们的值没有绑定。他们的价值观从未到来。
从用户收集字符串数据的选择字段如下所示:
->add('sourceName', 'choice', array
(
'label' => 'Choose source name:',
'empty_value' => 'Please choose a table link first...',
'choices' => array(),
'attr' => array('class' => 'extFieldChoice'),
)
jQuery完成其工作后,html select元素如下所示:
<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>
我怀疑该错误可以在最初为空的options数组中找到。但是,不可能将所有可能的选择都填满,因为它们有数百种选择。
参考方案
几天前我遇到了同样的问题,这让我发疯了寻找解决方案,我遇到了这个问题,甚至可能为时已晚,我想分享一下我发现的解决方案,以防万一有人会遇到相同的问题问题,我找到了其中三个,但似乎都不是完美的解决方案。
在我的情况下,我必须保存用户根据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
));
问题在于表单验证需要两件事:
如果与实体相关的表单会期待该实体
要进行验证,您可以使用“映射”轻松跳过此验证
=>错误的参数。
表单验证本身,如果您有一个“选择”类型字段,当表单验证朝着您声明的第一个选择时定义或不定义选择。而且我无法仅跳过此字段的验证。
因此,我找到了三种方法:
使用form事件,在将请求绑定到$builder->addEventListener(FormEvents::PRE_BIND, function (DataEvent $event) use ($xxx) { ...});表单之前(在链接的文章中有一个使用示例),我们对在ajax上创建的数据库进行相同的查询,我们检索值并将其添加到选择场。如果我们在代码中思考,这是更好的方法,但是我们必须两次执行相同的查询,而我不想这样做。
在我的情况下,我必须存储一个带有城市名称的字符串,因此另一种选择是将城市字段添加为隐藏字段,然后将整个select插入为元素。但是由于许多原因,我不喜欢这个,其中有两个:我不喜欢在symfony2创建的其他表单域之间插入和插入孔的想法。从我的角度来看,另一个是需要更多的jquery。
基于第二个选项,我根据用户选择的城市填写了其他一些隐藏字段,因此,我仅再添加一个隐藏字段来保存城市名称。提交表单后,我将从选择中删除所有选项,因此它与我定义的选项匹配。
$('#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();
}
});
我已经决定使用第三个选项,但我认为其中三个都有不好的一面。
PHP-Symfony2.4我可以在一个文件中有多个类吗? - php我正在使用Vzaar的PHP Library将视频从我的网站上传到其服务器空间。现在要指出的是-在它们的库中,有一些PHP文件,其中存在多个类,并且同一文件中不存在具有相同文件名的类。即查看OAuth.php,该文件中没有名称为OAuth的类。我想到的问题是当我创建任何PHP类文件时,可以在一个文件中创建多个类,以后再在代码中使用该文件,或者在其他项目中也使…
PHP:对数组排序 - php请如何排序以下数组Array ( 'ben' => 1.0, 'ken' => 2.0, 'sam' => 1.5 ) 至Array ( 'ken' => 2.0, 'sam' => 1.5, 'ben' =&…
PHP strtotime困境 - php有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00…
PHP-全局变量的性能和内存问题 - php假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…
php-casperjs获取内部文本 - php我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…