我目前正在将 Symfony 项目从 2.6 版升级到 2.7 版。我正在使用 Symfony 2.6-2.7 upgrade guide 这样做.它说:
You should flip the keys and values of the "choices" option in ChoiceType and set the "choices_as_values" option to true. The default value of that option will be switched to true in Symfony 3.0.
我已经做到了。但是我的表单不再按预期工作:不再为任何扩展的选择字段设置默认值(即 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
数组中提供的值。
最佳答案
我建议保留 'choices_as_values' => false
。
$builder->add('handwork', 'choice', array(
'multiple' => false,
'expanded' => true,
'choices' => array(
1 => 'Yes',
0 => 'No',
),
'choices_as_values' => false
)
将其更改为“true”会引入 BC-break 并计划为 v3。 添加它是为了处理更复杂的对象,但还不能很好地处理数组:https://github.com/symfony/symfony/issues/14377
在表单构建器中设置默认值,例如默认“否”:
$builder = $this->createFormBuilder(['handwork' => 0]);
关于php - 从 Symfony 2.6 升级到 2.7 : In a ChoiceType, "choices_as_values"有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33540174/