php - 从 Symfony 2.6 升级到 2.7 : In a ChoiceType, "choices_as_values"有什么作用?

标签 php forms symfony

我目前正在将 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 = 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 数组中提供的值。

最佳答案

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

关于php - 从 Symfony 2.6 升级到 2.7 : In a ChoiceType, "choices_as_values"有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33540174/

相关文章:

php 安全和可扩展的文件管理

php - Moodle 表单显示错误值

forms - 如何使用 Drupal 表单 API 制作后退按钮?

php - 使用 XAMPP 托管多个本地站点

php - 您首选的 php 部署策略是什么?

php - 在表单中发布非输入字段?

javascript - 如何在按下文本输入回车键时调用函数?

Symfony2 自定义错误异常监听器 - 渲染模板或传递给 Controller

php - Symfony Assetic 将所有文件合并为一个

php - Symfony2 DATEDIFF 函数