Gridview函数中的访问变量yii2

时间:2015-12-23 22:35:08

标签: php yii2 yii2-advanced-app yii2-basic-app

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

4 个答案:

答案 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)