我目前正在将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
选项(或者是因为从 ''
或 null
到 0
的PHP转换?) .
所以我去Symfony docs on the choice form field了解 choices_as_values
的作用 . 但那里没有记录 .
我究竟做错了什么 ?为什么没有记录这个 choices_as_values
选项?
Edit 1: 在阅读了更多Github问题之后,似乎还没有准备好doc更新,这可以解释为什么我没有在文档中找到我需要的东西 . 看起来之前,在2.6中,我的表单会自动将空值(例如 null
或 ""
)转换为 0
,这使得它们可以根据需要运行 . 我还没弄清楚 null
或 ""
如何在我的领域结束 .
Edit 2: 似乎添加选项 'choice_value' => function($v) { return $v; },
有助于恢复我的默认值 . 这是因为在SF 2.7中, radio
输入的 value
属性是从头开始生成的 . 它们是整数,而不是 choices
数组中提供的值 .
1 回答
我建议保留
'choices_as_values' => false
.将其更改为'true'会引入BC-break并计划为v3 . 它已被添加到处理更复杂的对象,并且还不能很好地使用数组:https://github.com/symfony/symfony/issues/14377
在表单构建器中设置默认值,例如默认值为“否”:
文档更新到期:https://github.com/symfony/symfony-docs/issues/5179