我在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()
方法。
答案 0 :(得分:3)
您获得optgroup的原因是因为您已将ArrayHelper::map...
包装在一个数组中,因此将数组数组传入下拉列表。因此,传递到下拉列表的参数的格式为:
array(
0 => array(
1 => "Sites",
2 => "Marketing",
...
)
)
如果嵌套数组传递到dropDownList
,子数组将被视为optgroup,外部数组的相应键作为opt-group标签。 optgroup label
为0
,因为ArrayHelper::map()
的结果是数组的第一个元素。
要修正此传递ArrayHelper::map...
,不要使用方括号:
$form->field($model, 'job_type_id')
->dropDownList(ArrayHelper::map(JobsTypes::find()->all(), 'id', 'type_name' ))