【问题标题】:Symfony ChoiceType $choices - labels and values swappedSymfony ChoiceType $choices - 标签和值交换
【发布时间】:2017-11-21 16:20:43
【问题描述】:

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();

像这样渲染:

文档有错吗?还是我说的不对?

【问题讨论】:

    标签: symfony symfony-forms


    【解决方案1】:

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

    你必须使用它来达到同样的效果:

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

    【讨论】:

      【解决方案2】:

      在较新的 Symfony 版本中,选项 choices_as_values 已弃用。

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

      这里有一个解释。我认为在您的情况下,您必须尽可能长时间地切换它或使用该选项。

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

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

      【讨论】:

      • 感谢您指出这一点。所以我想我的选择是将choices_as_values 设置为true 或升级到3.x。请您在回答中反映这一点
      • @StasParshin 正确,设置choices_as_values true 以便将键作为标签。从 v3 开始,键作为标签是默认设置。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      • 2022-01-03
      • 1970-01-01
      相关资源
      最近更新 更多