Yii2,如何使用checkboxlist字段

Yii2,如何使用checkboxlist字段,yii2,yii2-advanced-app,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

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

[['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'));?>

还有,如何在每个复选框前添加图像。

我不会神奇地将数组转换为字符串或(更糟糕的)整数。您可以使用getter/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')); ?>

然后
$model->sortAbcArray
以数组形式返回值,并
$model->sort_abc
以字符串形式返回值,其中值用逗号分隔。

您不需要将字段命名为数组:
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()) {
    ...
}

排序abc必须是一个数组:$form->field($model,'Sort_abc[])->复选框列表(['1'=>'项目A','2'=>'项目B','3'=>'项目C'])->标签($model->getAttributeLabel('Sort_abc');对于问题的第二部分,您必须与cssSorry合作在我的示例中忘记添加此项,但已添加此项,仍然不工作。请显示控制器代码,从中获取复选框值。我想知道您的
排序\u abc
是什么类型的数据库。此外,无论您为
sort\u abc
编写哪个规则,都应该将其加载到模型中(尽管它不会通过验证)。如果您的
sort\u abc
是字符串,那么
beforeSave()
您必须将其编码为某种东西(如json),并在
afterFind()上解码
['sortAbcArray', 'each', 'rule' => ['integer']]
$post = Yii::$app->request->post();
if (count($post) > 0) {
    $post['YourModel']['sort_abc'] = implode(",", $post['YourModel']['sort_abc']);
}

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