我已将Gridview小部件包含在 _form.php
文件中,该文件运行良好。问题是过滤器和分页。
<?php
$dataProvider = new ActiveDataProvider([
'query' => \app\models\ServiceCharges::find(),
'pagination' => [
'pageSize' => 5,
],
]);
?>
<?php
$searchModel = New \app\models\ServiceChargesSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
?>
</div>
</div>
<div>
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
'service_name',
'room_category',
'charges_cash',
'charges_cashless',
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
</div>
如果我将$dataprovider
分页部分放在$searchmodel
下方,则分页工作正常,但过滤器不起作用,反之亦然。
如何在_form.php中同时使用过滤器和分页。
任何解决方案都将不胜感激。
由于
答案 0 :(得分:14)
我对Yii2没有经验,但是如果它与1相似......
你为什么两次声明dataProvider
?我想第一个是能够自定义页面大小。
那么会发生什么呢?您使用一个数据提供程序来设置分页,然后将另一个数据提供程序传递给表。
其次我不知道你的模型在内部看起来如何......
由于我可以看到search()
方法返回dataProvider
,因此您应该更改其中的分页。
或者我认为您可以在search()
方法返回dataProvider
之后立即更改它:
$searchModel = New \app\models\ServiceChargesSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->pagination->pageSize=5;
因此,您不需要之前声明过的dataProvider
的第一个实例。
对于过滤器,我不知道它是如何完全符合您的ServiceChargesSearch::search
功能
但在Yii1中你通常会:
1)定义模型2)用来自
$_GET
3)Pass的数据填充$model->search()
到网格
如果过滤器仍然不起作用,您可以提供模型中的代码。
答案 1 :(得分:0)
我在控制器中这样做:
public function actionIndex()
{
$searchModel = new YourModels();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->pagination->pageSize = 10;
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}