首页 > 解决方案 > 默认选中单选按钮(未映射的 ChoiceType 字段)

问题描述

我正在尝试使用 Symfony 的 FormBuilder 选择默认选择的 ChoiceType 字段的选项之一。

我发现了很多类似的问题,但大多数都是关于映射到实体的字段,这不是我的情况。我发现的其他答案涉及使用“data”或“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,。)

呈现表单时,没有选择单选框,我希望默认选择第一个(“传入”)。

提前感谢您的任何回复:-)

编辑:这是我最后使用的(而不是'empty_data' => 'Incoming',),因为 type2 是类型的子集(类型是位的总和,type2 是位INCOMINGOUTGOING位之间的选择)。

'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 [];
},```

标签: formssymfony

解决方案


您可以尝试以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 [];
},

推荐阅读