我是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 ;
},
],
],
]); ?>
动态计算amount
和Total
列值,但我无法在其他单元格中访问这些值:(
答案 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的金额? 但我想这只是一些测试代码。