我正在尝试将视图文件中的变量访问到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()期望参数1为数组,给定
为null
答案 0 :(得分:3)
在use
可调用函数中的函数签名后插入value
:
[
'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>',
],
答案 1 :(得分:3)
要解释一下,$totalDays
在窗口小部件中不可用,因为整个函数仅在呈现窗口小部件时运行,不再声明$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>',
],
答案 2 :(得分:2)
虽然您可以通过关闭的use
部分定义地传递此变量,但是代码中的错误。违反了MVC原则,因为查看它仅用于显示,并且您公开了诸如array_push
之类的逻辑。
我建议对其进行重构并将数据计算放在模型中,这样您只需调用return $model->yourMethod();
即可返回所需的数据。
答案 3 :(得分:2)
正如@Fabrizio所说。在use
可调用函数的函数签名后插入value
:
'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)