根据yii/helpers/BaseHtml.php第1041行
public static function radioList($name, $selection = null, $items = [], $options = [])
{
if (ArrayHelper::isTraversable($selection)) {
$selection = array_map('strval', (array)$selection);
}
$formatter = ArrayHelper::remove($options, 'item');
$itemOptions = ArrayHelper::remove($options, 'itemOptions', []);
$encode = ArrayHelper::remove($options, 'encode', true);
$separator = ArrayHelper::remove($options, 'separator', "\n");
$tag = ArrayHelper::remove($options, 'tag', 'div');
$hidden = '';
if (isset($options['unselect'])) {
// add a hidden field so that if the list box has no option being selected, it still submits a value
$hiddenOptions = [];
// make sure disabled input is not sending any value
if (!empty($options['disabled'])) {
$hiddenOptions['disabled'] = $options['disabled'];
}
$hidden = static::hiddenInput($name, $options['unselect'], $hiddenOptions);
unset($options['unselect'], $options['disabled']);
}
$lines = [];
$index = 0;
foreach ($items as $value => $label) {
$checked = $selection !== null &&
(!ArrayHelper::isTraversable($selection) && !strcmp($value, $selection)
|| ArrayHelper::isTraversable($selection) && ArrayHelper::isIn((string)$value, $selection));
if ($formatter !== null) {
$lines[] = call_user_func($formatter, $index, $label, $name, $checked, $value);
} else {
$lines[] = static::radio($name, $checked, array_merge([
'value' => $value,
'label' => $encode ? static::encode($label) : $label,
], $itemOptions));
}
$index++;
}
$visibleContent = implode($separator, $lines);
if ($tag === false) {
return $hidden . $visibleContent;
}
return $hidden . static::tag($tag, $visibleContent, $options);
}
可知, 选项中有一项itemOptions,用于设置radioList中各项的属性
使用时就可以设置disabled为true,使各个radio不可选
<?= $form->field($model, 'classify')->radioList([
1 => Yii::t('backend', 'classify_1'),
2 => Yii::t('backend', 'classify_2'),
3 => Yii::t('backend', 'classify_3'),
4 => Yii::t('backend', 'classify_4'),
5 => Yii::t('backend', 'classify_5')
], ['itemOptions' => ['disabled' => true]]) ?>
但是,disabled有个问题,就是后端接收不到数据了,如果需要向后端传递已有数据,可以使用js控制rado不可选。
<?= $form->field($model, 'classify')->radioList([
1 => Yii::t('backend', 'classify_1'),
2 => Yii::t('backend', 'classify_2'),
3 => Yii::t('backend', 'classify_3'),
4 => Yii::t('backend', 'classify_4'),
5 => Yii::t('backend', 'classify_5')
], ['itemOptions' => ['onclick' => "return false;"]]) ?>