yii2 gridview set checkboxcolumn已选中

时间:2015-06-30 23:03:34

标签: gridview checkbox yii2 datagridviewcolumn

我需要将机器分配给机器组(m:n)。机器的安装使得必须使用带有checkboxcolumn的gridview来将机器分配给组。我得到了它的工作,关系得到了保存,但我没有想出如何在加载时在gridview中检查已经分配的机器。我的gridview的内容是基于MySQL-View的数据提供者。与

 'checkboxOptions' => function($model, $key, $index, $column) {
     return ['checked' => true];
 }

可以检查所有复选框。但是,当我试图这样做时

 'checkboxOptions' => function($model, $key, $index, $column) {
     $bool = in_array($model->id_machine, common\models\MachineGroup::getAssignedMachines());
     return ['checked' => $bool];
 }

抛出错误:“不能使用yii \ web \ View类型的对象作为数组”。实际上我不明白这里的问题是什么,但我找不到一种方法将所有已选择的机器的数组传递给这个功能(我尝试了很多)。当我在函数中手动定义一个虚拟数组时,一切正常。这里需要一些帮助......谢谢!

2 个答案:

答案 0 :(得分:2)

正如我在评论中所写,在回调之外定义变量

$machines = common\models\MachineGroup::getAssignedMachines();

然后在回调函数

function($model, $key, $index, $column) use ($machines) {
    $bool = in_array($model->id_machine, $machines); 
    return ['checked' => $bool];
}

答案 1 :(得分:0)

在Yii2 GridView中,您可以通过use keyword准备数据以检入checkboxcolumn,以便将变量用于匿名函数,并使用in_array()检查是否选中了正确的复选框。 这是一个例子。

//outside gridview prepare data list for check
$ar = [];
foreach(Model::find()->select(['id'])->asArray()->all() as $key => $val){
    $ar[] = $val['id'];
}

//..... inside checkbox column
    'checkboxOptions' => function($model, $key, $index, $column) use ($ar) {

             $bool = in_array($model->id, $ar);
             return ['checked' => $bool];
    }
//.....