首页 文章

从Symfony 2.6升级到2.7:在ChoiceType中,“choices_as_values”有什么作用?

提问于
浏览
3

我目前正在将Symfony项目从2.6版升级到2.7版 . 我正在使用Symfony 2.6-2.7 upgrade guide这样做 . 它说:

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

我做到了 . 但是我的表单不再按预期工作了:没有为任何扩展选择字段设置默认值(即使用 expanded = truemultiple = false ) . 之前,字段定义为:

$builder->add('handwork', 'choice', array(
    'multiple' => false,
    'expanded' => true,
    'choices' => array(
        1 => 'Yes',
        0 => 'No',
    ),
)

默认情况下选择 No 选项(或者是因为从 ''null0 的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 回答

  • 3

    我建议保留 '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]);
    

    文档更新到期:https://github.com/symfony/symfony-docs/issues/5179

相关问题