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

ReS*_*awN 4 forms key-value symfony

我一直在绞尽脑汁,从 2.7.x 文档一直升级到我正在使用的 3.2,但我不明白为什么他们删除了choices_as_values. 这正是我所需要的。

此时我有一个包含 3 个值的输入(不要问为什么),其中 2 个值具有相同的名称/标签。这是客户想要的,经过多次讨论后我不得不同意。所以,即我有以下内容:

1 => Name
2 => Name
3 => Other Name
Run Code Online (Sandbox Code Playgroud)

然而,Symfony 希望这样接收:

Name => 1
Name => 2
Other Name => 3
Run Code Online (Sandbox Code Playgroud)

你可以看到问题所在,结果数组将变成:

Name => 2
Other Name => 3
Run Code Online (Sandbox Code Playgroud)

我会缺少一个值。那么,解决这个问题的正确方法是什么?我尝试了多种解决方案,但没有一个有效。请记住,提交后的结果值仍然必须是1,23

xab*_*buh 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 '';
        }
    },
]);
Run Code Online (Sandbox Code Playgroud)