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
相关产品推荐
相关产品推荐

