You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yii2从数据库获取的DropDownList如何动态禁用选项

Yii2 动态禁用DropDownList中含指定标识的选项

实现思路

遍历控制器返回的$accommodationList数组,判断每个选项标签是否包含Fully Booked标识,为符合条件的选项生成禁用配置,再传递给DropDownList渲染方法即可。

代码实现

基础Html::dropDownList用法

<?php
use yii\helpers\Html;

// 预先生成每个选项的禁用配置
$optionConfigs = [];
foreach ($accommodationList as $id => $label) {
    // PHP 8.0+ 用str_contains,低版本替换为strpos($label, 'Fully Booked') !== false
    if (str_contains($label, 'Fully Booked')) {
        $optionConfigs[$id] = ['disabled' => true];
    }
}

// 渲染下拉列表
echo Html::dropDownList(
    'accommodation', // 控件name属性
    null, // 默认选中值
    $accommodationList, // 选项列表
    [
        'class' => 'form-control',
        'options' => $optionConfigs // 传入禁用配置
    ]
);
?>

ActiveForm集成用法

如果是在表单中使用ActiveForm,写法如下:

<?php
use yii\widgets\ActiveForm;
use yii\helpers\Html;

$optionConfigs = [];
foreach ($accommodationList as $id => $label) {
    if (str_contains($label, 'Fully Booked')) {
        $optionConfigs[$id] = ['disabled' => true];
    }
}

$form = ActiveForm::begin();

echo $form->field($model, 'accommodation_id')
    ->dropDownList($accommodationList, [
        'options' => $optionConfigs
    ]);

ActiveForm::end();
?>

渲染效果

最终生成的HTML会自动为含Fully Booked的选项添加disabled="disabled"属性,示例输出:

<option value='1'>Protea Hotel</option>
<option value='18' disabled='disabled'>Sun Hotel - Fully Booked</option>
<option value='22'>Safari Lodge</option>

内容的提问来源于stack exchange,提问作者Quentinb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 06:22:44