Symfony ChoiceType $ choices - 交换标签和值

时间:2017-06-19 12:36:31

标签: symfony symfony-forms

Symfony 2.8.2

根据Symfony文档"选项选项是一个数组,其中数组键是项目的标签,数组值是项目的值"

http://symfony.com/doc/2.8/reference/forms/types/choice.html#choices

但是通过以下表格,我看到的恰恰相反:

        $filterForm = $this->createFormBuilder()
        ->add('vendorName', ChoiceType::class, array(
            'expanded' => true,
            'multiple' => true,
            'choices'  => array('label' => 'value') // <-- HERE
        ))
        ->add('filter', SubmitType::class, array('label' => 'Filter'))
        ->getForm();

这样渲染:

Label is value and the value is label

文档错了吗?或者我没有做对吗?

2 个答案:

答案 0 :(得分:4)

在较新的Symfony版本中,不推荐使用选项choices_as_values

https://github.com/symfony/symfony/issues/14951

这是一个解释。我认为在你的情况下,你必须切换它或使用该选项,所以你可以。

choices_as_values设为true。如果你升级你必须改变它。

  

@Soullivaneuh choices_as_values不是直接来自choice_label。所以你在谈论一个不同的主题。   choices_as_values控制选项是键的位置或选项选项中的值。 Symfony 2.0附带选项作为键(和标签作为值),这意味着简单的语法仅在您的选择是整数或字符串时才有效。任何其他情况(例如布尔选择)都需要传递一个ChoiceList对象,使得使用更加复杂(特别是对于忘记布尔值不能用作键的人,因为PHP只是将它们静默地转换为字符串)。   这就是为什么在2.7中引入了这个选项以便能够翻转阵列(同时保持BC)的原因。优点是任何类型的数据都可以这种方式使用(字符串,整数,浮点数,布尔值,对象,数组)

答案 1 :(得分:1)

从Symfony 4开始,不再支持“ choices_as_values”: https://github.com/symfony/symfony/issues/14951

您必须使用它来实现相同的目的:

            'choice_label' => function ($value) {
                return $value;
            },