Symfony(3.2)的ChoiceType -翻转键/值?

hjzp0vay  于 2023-01-05  发布在  其他
关注(0)|答案(1)|浏览(110)

我已经绞尽脑汁了,从2.7.x文档一直到3.2,我不明白他们为什么要删除choices_as_values。这正是我所需要的。
此时,我得到了一个输入(不要问为什么),它有3个值,其中2个具有相同的名称/标签。这是客户想要的,经过多次讨论,我不得不同意。因此,我得到了以下内容:
然而,Symfony希望它这样接收:

Name => 1
Name => 2
Other Name => 3

你可以看到问题,结果数组将成为:

Name => 2
Other Name => 3

我会丢失一个值。那么,正确的方法是什么呢?我尝试了很多解决方案,没有一个有效。请记住,提交后的结果值必须仍然是123

0g0grzrc

0g0grzrc1#

改变的原因是PHP只允许整数和字符串作为数组键,而实际的选择值可以是任意的PHP类型。通常,标签是唯一的,因为重复的键可能会让用户感到困惑,所以很容易将它们作为choices选项值的键。
无论如何,如果需要复制标签,可以向choice_label传递一个回调函数,它将返回要显示的标签:

$builder->add(ChoiceType::class, null, [
    'choices' => [
        1,
        2,
        3,
    ],
    'choice_label' => function ($value) {
        switch ($value) {
            case 1:
                return 'Name';
            case 2:
                return 'Name';
            case 3:
                return 'Other Name';
            default:
                return '';
        }
    },
]);

相关问题