【发布时间】:2016-02-06 00:41:35
【问题描述】:
我目前正在将 Symfony 项目从 2.6 版升级到 2.7 版。我正在使用Symfony 2.6-2.7 upgrade guide 这样做。它说:
您应该翻转 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?)。
所以我去了Symfony docs on the choice form field 了解choices_as_values 的作用。但那里没有记录。
我做错了什么?为什么没有记录这个choices_as_values 选项?
编辑 1: 在阅读了更多 Github 问题之后,似乎文档更新还没有准备好,这可以解释为什么我没有在文档中找到我需要的内容。以前,在 2.6 中,我的表单似乎自动将空值(如 null 或 "" 转换为 0),这使得它们可以根据需要工作。我还没有弄清楚null 或"" 是如何进入我的领域的。
编辑 2: 似乎添加选项 'choice_value' => function($v) { return $v; }, 有助于恢复我的默认值。这是因为在 SF 2.7 中,radio 输入的 value 属性是从头开始生成的。它们是一个整数,而不是 choices 数组中提供的值。
【问题讨论】:
-
非常感谢,我正在升级一个 Sf 站点,几个以字符串作为键和值的选择开始返回整数值,并且默认检查值在其他选择中丢失,
'choice_value' => function($v) { return $v; }是解决方案!