Yii2 Gridview当前行值

时间:2015-01-13 09:09:03

标签: php yii2 yii2-advanced-app

我是Yii2的新手。我有一个gridview,其中2列是自动生成的(不在模型类中)。每行都有一个按钮,单击该按钮时,我想访问当前行单元格值并进行一些计算。

我无法使用$data,因为它只引用当前模型行。下面是我的代码:

<?php 

echo GridView::widget([
    'dataProvider' => $model->getInsuredCompanyVehiclesArrayDataProvider(),
    'filterModel' => $model->getInsuredCompanyVehiclesArrayDataProvider(),
    'columns' => [                                          
        [
            'label' => 'Amount',
            'format' => 'raw',
            'value' => function ($data) {
                return $data->rate * Yii::$app->session->get('motorInsuranceEntry')->sumInsured/100;
            },
        ],                      
        [
            'label'=>'Total',
            'format' => 'raw',
            'value' => function ($model, $key, $index, $column) {
                //return $data->rate * Yii::$app->session->get('motorInsuranceEntry')->sumInsured/100 + $model->amount;

                return '' . $column ;                       
            },
        ],                                                  
    ],
]); ?>

动态计算amountTotal列值,但我无法在其他单元格中访问这些值:(

1 个答案:

答案 0 :(得分:0)

正如您可能已经知道的那样,由于列是动态的,您无法从其他列访问它们。

我会为模型类中的动态列(Amount和Total)创建函数来计算动态列。点击行中的按钮后,通过pajax刷新网格。

您还可以向gridview添加其他数据,例如here

通过扩展gridview模型或使用内联函数(req.PHP 5.3+)。 但是,如果它们完全是每行的动态,那么你还必须再次计算每个列值。

但我想你的一个简单错误就是你使用了一次

'value' => function ($data) {

而另一次

'value' => function ($model, $key, $index, $column) {

这两个功能都是正确的。有一次通过参数“name”$ data将模型传递给函数,另一次使用“name”$ model传递模型。 在函数内部,您只能访问传递给函数的参数。

您的第二个内联函数代码应该使用$ model而不是$ data(第一个参数名称是模型)。

 return $model->rate * Yii::$app->session->get('motorInsuranceEntry')->sumInsured/100 + $model->amount;

但正如我所提到的,我会在你的Model类中创建一个函数

public function getAmount() {
    return $this->rate * Yii::$app->session->get('motorInsuranceEntry')->sumInsured/100;
}

我不明白你的总数只是* 2的金额? 但我想这只是一些测试代码。