【问题标题】:Upgrading from Symfony 2.6 to 2.7: In a ChoiceType, what does the "choices_as_values" do?从 Symfony 2.6 升级到 2.7:在 ChoiceType 中,“choices_as_values”有什么作用?
【发布时间】: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 = truemultiple = 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; } 是解决方案!

标签: php forms symfony


【解决方案1】:

我建议保留'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.3 中使用。 它被添加来处理更复杂的对象,但还不能很好地处理数组:https://github.com/symfony/symfony/issues/14377

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

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

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

【讨论】:

  • 感谢您的帮助@Alex。在您给出的示例中,值不会翻转,如升级指南中所述。为什么会这样?
  • 因为'choices_as_values' => false choicesvalue => label 对的数组。我只是假设您希望页面上出现类似 <input type="radio" value="1" /><label>Yes</label> 的内容。
猜你喜欢
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
  • 2016-03-22
  • 2020-11-05
相关资源
最近更新 更多