在 Gridview 函数 yii2 中访问变量

Access variable in Gridview function yii2

我正在尝试将视图文件上的变量访问到 Gridview 但它抛出错误 it should be array but null given 我在我的视图文件之上声明 $totalDays 并且我正在使用它在 Gridview 中,如下所示

[
            'attribute' =>  'class_id',
            'format' => 'raw',
            'label' => "Class Date",
            'value' => function ($model) {
                array_push($totalDays,$model->class->date);
                return $model->class->date;
            },
            'footer'=> '<span>Total Days</span>',
],

但它抛出以下错误

array_push() expects parameter 1 to be array, null given

value 可调用函数的函数签名后插入 use

[
            'attribute' =>  'class_id',
            'format' => 'raw',
            'label' => "Class Date",
            'value' => function ($model) use($totaleDays) {
                array_push($totalDays,$model->class->date);
                return $model->class->date;
            },
            'footer'=> '<span>Total Days</span>',
],

虽然您可以明确地将此变量传递给闭包的 use 部分,但它在您的代码中是错误的。违反了MVC原则,因为view只是为了显示,而你暴露了array_push.

这样的逻辑

我建议对其进行重构并将数据计算放在模型中,这样您只需调用 return $model->yourMethod(); 即可获得 return 所需的数据。

解释一下,$totalDays在widget中是不可用的,因为整个函数只在widget渲染时得到运行,不再声明$totalDays。正如@arogachev 上面所暗示的,您需要在模型中创建 $totalDays ,然后您才能访问它。在您的模型中试试这个;

public function getTotalDays(){
//Your logic here to generate totalDays
return $totalDays;
}

然后你就可以像这样在你的视图中使用它了;

[
    'attribute' =>  'class_id',
    'format' => 'raw',
    'label' => "Class Date",
    'value' => function ($model) {
        array_push($model->totalDays, totalDays,$model->class->date);
        return $model->class->date;
    },
    'footer'=> '<span>Total Days</span>',
],

正如@Fabrizio所说。在 value 可调用函数中的函数签名后插入 use

'value' => function ($model) use($totaleDays) {
    array_push($totalDays,$model->class->date);
    return $model->class->date;
},

要将多个值传递给值函数,您可以使用如下方法。

'value' => function ($model) use($var1, $var2....., $varN) {
    array_push($totalDays,$model->class->date);
    return $model->class->date;
},

像这样use($var1, $var2....., $varN)