默认情况下检查单选按钮(未映射的ChoiceType字段)

时间:2019-08-26 15:43:36

标签: forms symfony

我正在尝试使用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是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 [];
},```

2 个答案:

答案 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 [];
},