在 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)
我正在尝试将视图文件上的变量访问到 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)