首页 > 解决方案 > Yii2 dataprovider 未加载 GET 参数

问题描述

我正在尝试为 Yii2 listView 设置分页。我'page'在 GET 请求中发送参数,但总是将 0 加载到dataprovider->pagination->page属性中。调试时,我可以看到正确设置了 GET 页面参数,当尝试设置pageSize'per-page'GET 参数时,它也可以正常工作并正确加载。

我的控制器代码:

$searchModel = new WinerySearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);   
$dataProvider->pagination->pageSize = $this->pageSize;


if (\Yii::$app->request->isAjax) {

$displayedItems = $dataProvider->pagination->pageSize * ($dataProvider->pagination->page) + $dataProvider->count;

0 总是返回$dataProvider->pagination->page

Ajax 请求代码:

var pageNumber = 1;
$.ajax({
        method: 'GET',
        url: url+"?page="+pageNumber,
        success: function(data, textStatus, request){

标签: phpyii2

解决方案


插入

<?php var_dump($dataProvider->pagination->page); ?>
<?php var_dump($dataProvider->pagination); ?> 

在索引页面上的一个网格或列表的底部。如果手动刷新页面,var_dump 总是返回比页码小一的值。我使用了 1 的 pageSize。我还注意到它可以保持休眠状态,即。即使通过分页按钮而不是通过刷新来更改页面,也可以根据其当前值进行更改。

考虑一下这段代码:

public function getPage($recalculate = false)
{
    if ($this->_page === null || $recalculate) {
        $page = (int) $this->getQueryParam($this->pageParam, 1) - 1;
        $this->setPage($page, true);
    }

    return $this->_page;
}

或者也许考虑修改这段代码:

$dataProvider->pagination = [
        'pageSize'=>$pageSize,
        'page'=>$pageNumber-1,
];

推荐阅读