从 Symfony 表单发送选择值而不是选择键

Send choice Value instead choice key from Symfony form

我需要从 Symfony 表单发送 ChoiceType::class

但我不需要选择键,我需要发送选择值。

这可能吗?

 $form->add('section', ChoiceType::class, array(
                'mapped' => false,
                'choices' => array(
                    1 => 'value1',
                    2 => 'value2'

                ),
          ));

如果我选择 value1,

我只想发送 value1

不是 键 1 作为默认值。

你只需要扭转它。另外,我认为您不需要 'mapped'。 试试这个:

$form->add(
    'section',
    ChoiceType::class,
    [
        'choices' => [
            'value1' => 1,
            'value2' => 2,
        ],
    ]
);

应该可以。

[Since Symfony 2.7] 在任何情况下,您都可以通过 choice_value 选项和闭包函数 (Reference) 来调整选择值:

$form->add('section', ChoiceType::class, array(
    'choice_value' => function ($value, $key, $index) {
        return $value;
    } 
));

对动态有用choices

您可以使用

array_flip ($array)

refer to php docs

可能有点晚了,但我已经做到了,而且效果很好。没有 array_flip。可能对某人有用。

$dataUsers = [];
$users     = [
    ['id' => 1, 'firstname' => 'joe', 'lastname' => 'doe'],
    ['id' => 2, 'firstname' => 'will', 'lastname' => 'fog'],
];

foreach ($users as $u) {
    $dataUsers[] = (object)['id' => $u['id'], 'label' => $u['firstname']];
}

$builder
    ->add('users', ChoiceType::class, [
        'choices' => $dataUsers,
        'choice_label' => function ($value) {
            if (is_object($value)) {
                return $value->label;
            } else {
                return 0;
            }
        },
        'choice_value' => function ($value) {
            if (is_object($value)) {
                return $value->id;
            } else {
                return 0;
            }
        },
        'data' => (object)[ 'id' => 2]
    ]);