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

4
我一直在努力理解从2.7.x文档到3.2文档的升级过程,但我不明白为什么他们移除了choices_as_values。这正是我需要的。
目前,我有一个输入框(不要问我为什么),其中有3个值,其中2个具有相同的名称/标签。这是客户想要的,经过多次讨论后,我只能同意。因此,例如,我有以下内容:
1 => Name
2 => Name
3 => Other Name

然而,Symfony 希望它以这种方式接收:
Name => 1
Name => 2
Other Name => 3

您可以看到问题,生成的数组将变为:
Name => 2
Other Name => 3

我会缺少一个值。那么,正确的做法是什么呢?我已经尝试过很多解决方案,但都没有成功。请记住,提交后的结果必须仍然是12或者3

1个回答

6

翻转的原因是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 '';
        }
    },
]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接