Symfony2:未绑定到表单对象的选择字段中的字符串值 - php

我的应用程序包含一个带有三个选择字段/下拉列表的表单。

第一个链接到实体中的“关系”字段,并且工作正常。
用户应该首先选择一个表链接。

第二个和第三个都链接到同一实体中的字符串字段。
通过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…