yii2 gridview 设置复选框列选中

yii2 gridview set checkboxcolumn checked

我需要将机器分配到机器组 (m:n)。机器的数量使得必须使用带有复选框列的 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];
 }

抛出错误:"Cannot use object of type yii\web\View as array"。实际上我不明白这里的问题是什么,但我找不到将所有已选机器的数组传递给此功能的方法(我尝试了很多)。当我在函数中手动定义一个虚拟数组时,一切正常。这里需要一些帮助...谢谢!

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

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

然后在回调函数中

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

在 Yii2 GridView 中,您可以准备数据以通过使用关键字将变量用于匿名函数来检查复选框列,并使用 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];
    }
//.....