yii2:表单视图中Gridview的自定义分页

Paw*_*wan 3 php pagination gridview yii2

我已将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> 
Run Code Online (Sandbox Code Playgroud)

如果我将$dataprovider分页部分放在下面$searchmodel,分页工作正常,但是过滤器不起作用,反之亦然.

如何在_form.php中同时使用过滤器和分页.

任何解决方案将不胜感激.

谢谢

Ale*_*lin 14

我对Yii2没有经验,但如果它与1相似

你为什么要宣布dataProvider两次?我想第一个是能够自定义页面大小.

那么会发生什么呢?您使用一个数据提供程序来设置分页,然后将另一个数据提供程序传递给表.

其次我不知道你的模型在里面看起来如何......

因为我可以看到search()方法返回a dataProvider,你应该改变那里的分页.

或者我认为您可以在search()方法返回之后立即更改它dataProvider:

$searchModel = New \app\models\ServiceChargesSearch(); 
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->pagination->pageSize=5;
Run Code Online (Sandbox Code Playgroud)

所以你不需要dataProvider你之前声明的第一个实例.

至于滤镜我不知道它是如何完全表现你的ServiceChargesSearch::search功能的

但在Yii1中你通常会:

1)定义模型2)用$_GET3)填写数据传递 $model->search()到网格

如果过滤器仍然不起作用,您可以从模型中提供代码.