我在网格中添加了一个额外的列,其值由模型中的函数计算。 索引文件中的列
[
'attribute' => 'Arrears',
'pageSummary'=>true,
'value' => function ($model) {
return $model->calculatearrears($model);
},
],
模型中的功能
public function calculatearrears($model,$month){
return ChallanArrears::find()->select('total')
->Where(['challan_arrears.challan_id' => Challan::find()
->select(['MAX(id)'])->where(['month_year' => $month])
->andWhere(['sid'=>$model->sid])->groupBy('sid')])->scalar();
}
现在,我想将月值从控制器传递给此函数。 我在控制器中的代码是
public function actionIndex()
{
$request = Yii::$app->request;
$month = $request->post('month');
$searchModel = new DetailfeereportSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
'month' => $month,
]);
}
这个值可以在索引页面中访问,但是当我在索引中的函数中传递它时,它不起作用。我试图将其作为
传递[
'attribute' => 'Arrears',
'pageSummary'=>true,
'value' => function ($model, $month) {
return $model->calculatearrears($model, $month);
},
],
发生错误未定义变量:月 请帮助我指导可能是我试图以错误的方式实现我的目标。或者告诉我如何从控制器访问该值并通过gridview小部件将其传递给函数
答案 0 :(得分:0)
您可以使用use()使clous
显示$ month [
'attribute' => 'Arrears',
'pageSummary'=>true,
'value' => function ($model) use($month) {
return $model->calculatearrears($model, $month);
},
],
并且显然必须根据所需用途调整函数calculatearrears,例如:
public function calculatearrears($model, $month){
.......
}
答案 1 :(得分:0)
有两种方法可以做到这一点。首先,稍微修改一下代码:
你在模特中的功能:
public function calculatearrears($model,$month){
return ChallanArrears::find()->select('total')
->Where(['challan_arrears.challan_id' => Challan::find()
->select(['MAX(id)'])->where(['month_year' => $month])
->andWhere(['sid'=>$model->sid])->groupBy('sid')])->scalar();
}
在视图文件中:
[
'attribute' => 'Arrears',
'pageSummary'=>true,
'value' => function ($model) use($month) { // here use($month)
return $model->calculatearrears($model, $month);
},
],
或更多OOP方式,首先在模型中定义属性并添加到规则中:
class YourModel extends ActiveRecord
{
public $month;
public function rules() {
return [
// your rules
['month', 'string'],
];
}
//...
}
在控制器中:
public function actionIndex()
{
$request = Yii::$app->request;
$searchModel = new DetailfeereportSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams); //here $month will be loaded, because it's now your model property
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider
]);
}
将您的功能更改为:
public function calculatearrears(){
return ChallanArrears::find()->select('total')
->Where(['challan_arrears.challan_id' => Challan::find()
->select(['MAX(id)'])->where(['month_year' => $this->month])
->andWhere(['sid'=>$this->sid])->groupBy('sid')])->scalar();
}
在视图文件中使用它:
[
'attribute' => 'Arrears',
'pageSummary'=>true,
'value' => function ($model) {
return $model->calculatearrears();
},
],