|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
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)
复制代码 checkboxList函数源码为:- public static function checkboxList($name, $selection = null, $items = [], $options = [])
- {
- //检查name是否以[]为后缀
- if (substr($name, -2) !== '[]') {
- $name .= '[]';
- }
- //回调函数
- $formatter = isset($options['item']) ? $options['item'] : null;
- //在生成每个checkbox的时候的选项
- $itemOptions = isset($options['itemOptions']) ? $options['itemOptions'] : [];
- //每个checkbox中的label是否需要编码
- $encode = !isset($options['encode']) || $options['encode'];
- $lines = [];
- $index = 0;
- foreach ($items as $value => $label) {
- //设置当前的checkbox是否选中,$selection可为字符串或者数组
- $checked = $selection !== null &&
- (!is_array($selection) && !strcmp($value, $selection)
- || is_array($selection) && in_array($value, $selection));
- if ($formatter !== null) {
- //如果设置了item回调函数,则使用回调函数的结果作为html表单
- $lines[] = call_user_func($formatter, $index, $label, $name, $checked, $value);
- } else {
- //否则使用checkbox函数来生成checkbox表单
- $lines[] = static::checkbox($name, $checked, array_merge($itemOptions, [
- 'value' => $value,
- 'label' => $encode ? static::encode($label) : $label,
- ]));
- }
- $index++;
- }
- //如果设置了unselect,则生成一个hidden类型的input。当没有选择checkbox的时候,这个将作为默认值返回
- if (isset($options['unselect'])) {
- // add a hidden field so that if the list box has no option being selected, it still submits a value
- $name2 = substr($name, -2) === '[]' ? substr($name, 0, -2) : $name;
- $hidden = static::hiddenInput($name2, $options['unselect']);
- } else {
- $hidden = '';
- }
-
- //每个checkbox表单html之间的分隔符
- $separator = isset($options['separator']) ? $options['separator'] : "\n";
- //所有的checkbox的外层容器标签
- $tag = isset($options['tag']) ? $options['tag'] : 'div';
- unset($options['tag'], $options['unselect'], $options['encode'], $options['separator'], $options['item'], $options['itemOptions']);
- return $hidden . static::tag($tag, implode($separator, $lines), $options);
- }
复制代码
其他:
设置默认选定一个或多个初始值?比如- <?= $form->field($model, 'hobby')->checkboxList(['0'=>'篮球','1'=>'足球','2'=>'羽毛球','3'=>'乒乓球']) ?>
复制代码
Controller中直接对$model->hobby设置值就可以了:
$model->hobby=‘1’ 或者 $model->hobby=['0','2'] |
|