Yii2,如何使用checkboxlist字段

时间:2018-04-18 06:48:12

标签: yii2 yii2-advanced-app

由于我需要一个复选框列表,我决定使用复选框列表,但我似乎无法将值添加到数据库中,如果我使用列表它只存储列表中的第一个值而不是所有选中的复选框。

[['sort_abc'], 'string']//not working
[['sort_abc'], 'integer']//not working

<?=$form->field($model, 'sort_abc[]')->checkBoxLIst( ['1' => 'Item A', '2' => 'Item B', '3' => 'Item C'])->label($model->getAttributeLabel('sort_abc'));?>

数据库字段

sort_abc |  varchar(255) |  yes |   NULL

另外,如何在每个复选框之前添加图像。

2 个答案:

答案 0 :(得分:0)

Yii不会将您的数组神奇地转换为字符串或(更糟糕的)整数。您可以使用getters / setter定义的虚拟属性来简化整个过程:

public function getSortAbcArray() {
    if (empty($this->sort_abs)) {
        return [];
    }

    return explode(',', $this->sort_abc);
}

public function setSortAbcArray($value) {
    $this->sort_abs = implode(',', array_filter($value));
}

然后在表单中使用此新属性:

<?= $form->field($model, 'sortAbcArray')
    ->checkBoxList(['1' => 'Item A', '2' => 'Item B', '3' => 'Item C'])
    ->label($model->getAttributeLabel('sort_abc')); ?>

在模型规则中:

['sortAbcArray', 'each', 'rule' => ['integer']]

然后$model->sortAbcArray将值作为数组返回,将$model->sort_abc作为字符串返回,其中值以逗号分隔。

答案 1 :(得分:0)

您无需将以下字段命名为数组:sort_abc[]-> sort_abc

只需执行此操作,模型就会将选中的复选框值存储在其属性中。

要保存选定的值,可以在控制器中输入:

$post = Yii::$app->request->post();
if (count($post) > 0) {
    $post['YourModel']['sort_abc'] = implode(",", $post['YourModel']['sort_abc']);
}

if ($model->load($post) && $model->save()) {
    ...
}