我正在Yii 2中创建自己的下拉列表函数。我创建了一个函数和一个视图,在视图中,我的下拉表单中有多个项目。
<?= $form->customDropDown($dpForm, 'color', [
'items' =>
[
'label' => 'red',
'value' => 'red',
'options' => [
'style' => 'color: red'
]
]
[
'label' => 'blue',
'value' => 'blue',
'options' => [
'style' => 'color: blue'
]
]
]
我创建的函数如下(它使用并位于ActiveForm中):
public function customDropdown($model, $attribute, $items = [], $options = [])
{
$value = Html::getAttributeValue($model, $attribute);
$field = $this->field($model, $attribute, $options);
return $this->staticOnly ? $field : $field->dropDownList($items);
}
问题是,当我打开我的下拉列表时,所有的东西都是一个选项或一个选项组,而不仅仅是带有标签和样式的选项。
在Inspector中的显示效果如下:
<optgroup label='0'>
<option value="label">red</option>
<option value="value">red</option>
</optgroup>
<optgroup label="options">
<option value="style">color: red</option>
</optgroup>
以此类推。我想要的效果如下:
<option value="red" style="color: red">red</option>
但是我似乎无法实现这个效果。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
为了实现所需的输出,其中下拉列表中的每个项目都由一个具有指定标签、值和样式的单个
<option>标签表示,您需要按照以下方式修改您的代码: 在您的视图文件中,更新customDropDown函数调用以正确传递items数组:<?= $form->customDropDown($dpForm, 'color', [ [ 'label' => 'red', 'value' => 'red', 'options' => [ 'style' => 'color: red' ] ], [ 'label' => 'blue', 'value' => 'blue', 'options' => [ 'style' => 'color: blue' ] ], ] ); ?>更新的方法:public function customDropdown($model, $attribute, $items = [], $options = []) { $value = Html::getAttributeValue($model, $attribute); $field = $this->field($model, $attribute); $options['options'] = array_column($items, 'options'); $options['prompt'] = ''; return $this->staticOnly ? $field : $field->dropDownList(array_column($items, 'label', 'value'), $options); }在这个更新的版本中,我们直接将$options数组传递给dropDownList方法,并使用array_column从$items数组中提取标签-值对