我正在尝试使用Symfony的FormBuilder通过默认选择ChoiceType字段中的一个。
我发现了很多类似的问题,但是大多数问题都与映射到实体的字段有关,这不是我的情况。我发现的其他答案涉及使用“数据”或“ empty_data”属性,但似乎都不适合我。
这是我当前的“添加”方法(在我的FormBuilder中):
$builder->add('type2', ChoiceType::class, [
'mapped' => false,
'label' => false,
'choices' => [
"Incoming" => ComEntry::INCOMING,
"Outgoing" => ComEntry::OUTGOING,
],
'expanded' => true,
'empty_data' => 'Incoming',
]);
(我也尝试过'empty_data' => ComEntry::INCOMING,
。)
呈现表单时,未选中任何单选框,我要默认选择第一个(“传入”)。
在此先感谢您的答复:-)
EDIT:这是我最后使用的内容(而不是'empty_data' => 'Incoming',
),因为type2是类型的子集(type是位的总和,type2是INCOMING
和OUTGOING
位)。
'choice_attr' => function($choice, $key, $value) use ($options) {
// If the record is being edited and the user selected "Outgoing" at creation, check the "Outgoing" choice.
if($options['data']->getType() & ComEntry::OUTGOING and $choice == ComEntry::OUTGOING)
return ['checked' => 'checked'];
// Else, check the "Incoming" choice.
elseif($choice == ComEntry::INCOMING)
return ['checked' => 'checked'];
else
return [];
},```
答案 0 :(得分:0)
您可以做的是:'data' => ComEntry::INCOMING
而不是empty_data
empty_data
在提交表单时很有用。
但是该方法仅适用于创建。对于版本,您将必须检查表单是否已使用数据初始化。
答案 1 :(得分:0)
您可以尝试使用choice_attr
选项的可调用形式:
这可以是一个关联数组,其中键与选择键匹配 值是每个选择,可调用项或 属性路径。
'choice_attr' => function($choice, $key, $value) use ($options) {
// If no value is set mark INCOMING as checked
if (empty($options['data']->type2) && ComEntry::INCOMING == $value) {
return ['checked' => 'checked'];
}
return [];
},