网上关于checkboxList的描述:
public static function checkboxList($name, $selection = null, $items = [], $options = [])
下面我们一一说明其中的参数及使用
$name——设置checkbox的name
字符串,这个用来设置生成的每个checkbox的name值,因为是生成多个checkbox,所以$name的值要以[]结尾,如果没有的话在函数内部会自动加上[]
$selection——设置checkbox是否选中
字符串或者数组,这个用来设置哪些checkbox为选中状态,值为checkbox中的value;如果需要多个checkbox选中那么就用数组的形式来传递多个值,如['a','b','c']
$items——设置多个checkbox的数据源
数组,这个用来生成各个checkbox的数据源,其中键作为checkbox的value,值作为checkbox的label
$options
数组,这个比较复杂,里面的参数比较多,其中有几个固定的参数:
tag:字符串,设置生成的所有的checkbox的容器标签,默认为div
unselect:字符串,当checkbox都没有选择的时候的默认值。如果设置这个,会自动生成一个以name(不带[])为名称的hidden类型的input,这个input的值就为unselect
encode:布尔值,设置每个checkbox的label是否需要编码,默认为true
separator:字符串,生成的每个checkbox html代码之间的连接字符串,默认为 \n,也就是说默认生成的checkbox都是一行一个。
itemOptions:数组,生成每个checkbox的参数选项。这个在单独介绍checkbox函数的时候说明
item:回调函数,在循环生成每个checkbox表单的时候,会调用这个函数。如果设置了则使用返回值作为checkbox的表单,否则使用static::checkbox函数来生成每个checkbox表单,函数格式为:
function ($index, $label, $name, $checked, $value)
在使用activeform时,一般格式是这样的
echo $form->field($model, 'size')->checkboxList(name,$model->allSize);
size相当于$selection
allSize相当于$items
关键在于size的格式,size需要存放键值的数组,例如$items是(0=>'X',1=>'XL',2=>'2XL');我们想选的是1和2,那$selection就需要是(0=>1,1=>2);
如果直接传(1=>'XL',2=>'2XL');会出错,可以使用array_keys()转换一下。
-------------------------------------------------------------------------------------------------------------
以下是总结:
实例:
<?= $form->field($model, 'sex')
->checkboxList([0 => '男', 1 => '女', 2 => '保密'],
['value' => [0, 1],
'item' => function ($index, $label, $name, $checked, $value){
$checkStr = $checked ? "checked" : "";
return '<label><input type="checkbox" name="' . $name . '" value="' . $value . '" ' . $checkStr . ' class="class' . $index . '" data-uid="user' . $index . '">' . $label . '</label>';
},
'itemOptions' => ['class' => 'myClass']]);
?>
说明:
CheckBoxList的参数[0 => '男', 1 => '女', 2 => '保密']表示数据源,即多选框的所有选项,是数组形式。
['value' => [0, 1],表示已选择的选项。“0,1”是从数据库读取的选项,一般是字符串,此处要以数组的形式展示,可以用explode转化一下。
'item' 是自定义数据源
eg:
<?= $form->field($model, 'type')->checkboxList(Categorys::getCategoriesName(), ['value' => explode(',', $model->type)]) ?>
field($model, 'type'): 标签
Categorys::getCategoriesName():所有多选选项数据源
'value' => explode(',', $model->type)]):已选择的数据 $model->type表示从数据库读取的字符串保存值(一般是保存的数据源key值),在保存数据源key值的时候记得用implode将数组转化为字符串。
参考网址:
https://blog.csdn.net/zimuxin/article/details/78065557
转载请注明: ITTXX.CN--分享互联网 » 关于Yii2的checkboxList的使用和设置问题
最后更新:2021-08-03 11:16:39