Php 从Symfony 2.6升级到2.7:在ChoiceType中,“;选择“作为价值观”;做

Php 从Symfony 2.6升级到2.7:在ChoiceType中,“;选择“作为价值观”;做,php,forms,symfony,Php,Forms,Symfony,我目前正在将Symfony项目从2.6版升级到2.7版。我是用电脑做的。它说: 您应该翻转ChoiceType中“choices”选项的键和值,并将“choices_as_values”选项设置为true。在Symfony 3.0中,该选项的默认值将切换为true 我已经做到了。但是我的表单不再像预期的那样工作了:不再为任何扩展的选项字段设置默认值(即使用expanded=true和multiple=false)。在此之前,字段定义为: $builder->add('handwork',

我目前正在将Symfony项目从2.6版升级到2.7版。我是用电脑做的。它说:

您应该翻转ChoiceType中“choices”选项的键和值,并将“choices_as_values”选项设置为true。在Symfony 3.0中,该选项的默认值将切换为true

我已经做到了。但是我的表单不再像预期的那样工作了:不再为任何扩展的选项字段设置默认值(即使用
expanded=true
multiple=false
)。在此之前,字段定义为:

$builder->add('handwork', 'choice', array(
    'multiple' => false,
    'expanded' => true,
    'choices' => array(
        1 => 'Yes',
        0 => 'No',
    ),
)
默认情况下选择了
No
选项(或者是因为PHP从
'
null
转换为
0
?)

因此,我去了解
choices\u as\u values
的作用。但那里没有记录

我做错了什么?为什么这个
choices\u as\u values
选项没有文档记录

编辑1:在阅读了更多Github问题后,似乎文档更新还没有准备好,这可以解释为什么我没有在文档中找到我需要的内容。以前,在2.6中,我的表单似乎会自动将空值(如
null
转换为
0
),这使得它们可以根据需要工作。我还没有弄清楚
null
如何在我的字段中结束


编辑2:似乎添加了选项
'choice_value'=>函数($v){return$v;},
有助于恢复默认值。这是因为在SF 2.7中,
无线电
输入的
属性是从头生成的。它们是一个整数,而不是
choices
数组中提供的值。

我建议将
'choices\u保留为\u值=>false

$builder->add('handwork', 'choice', array(
    'multiple' => false,
    'expanded' => true,
    'choices' => array(
        1 => 'Yes',
        0 => 'No',
    ),
    'choices_as_values' => false
)
将其更改为“true”将引入BC中断,并计划在v3中使用。 添加它是为了处理更复杂的对象,但还不能很好地处理阵列:

在表单生成器中设置默认值,例如默认值“否”:

$builder = $this->createFormBuilder(['handwork' => 0]);

文档更新到期:

感谢您的帮助@Alex。在您给出的示例中,值不会翻转,如升级指南中所述。为什么会这样?因为使用
'choices\u作为\u值=>false
choices
是一个
值=>标签对的数组。我只是假设你希望页面上出现类似
Yes
的内容。非常感谢你,我正在升级一个Sf站点,一些带有字符串作为键和值的选项开始返回整数值,并且默认选中值在其他选项中丢失,
'choice\u value'=>函数($v){return$v;}
就是解决方案!!