如何从Yii2表单的下拉列表中删除optgroup元素

时间:2015-09-29 10:56:58

标签: php forms yii2

我在Yii2中使用ActiveForm生成DropDownList元素。 我的代码是:

$form->field($model, 'job_type_id')
     ->dropDownList([ArrayHelper::map(JobsTypes::find()->all(), 'id', 'type_name' )])
     ->label('Job type')

但这会生成以下HTML代码:

<select name="Jobs[job_type_id]" class="form-control" id="jobs-job_type_id">
<optgroup label="0">
<option value="1">Sites</option>
<option value="2">Marketing</option>
</optgroup>
</select>

为什么会有 optgroup 元素?这不是必需的。如何从代码中删除此元素?

使用时

Html::activeDropDownList($model, 'id', ...);

正确生成了Html,但此元素没有label()方法。

1 个答案:

答案 0 :(得分:3)

您获得optgroup的原因是因为您已将ArrayHelper::map...包装在一个数组中,因此将数组数组传入下拉列表。因此,传递到下拉列表的参数的格式为:

array(
    0 => array(
        1 => "Sites",
        2 => "Marketing",
        ...
    )
)

如果嵌套数组传递到dropDownList,子数组将被视为optgroup,外部数组的相应键作为opt-group标签。 optgroup label0,因为ArrayHelper::map()的结果是数组的第一个元素。

要修正此传递ArrayHelper::map...,不要使用方括号:

$form->field($model, 'job_type_id')
     ->dropDownList(ArrayHelper::map(JobsTypes::find()->all(), 'id', 'type_name' ))
相关问题