从 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)
可能有点晚了,但我已经做到了,而且效果很好。没有 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]
]);
我需要从 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)
可能有点晚了,但我已经做到了,而且效果很好。没有 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]
]);