PHPYii2使用ActiveDataProvider超出页码一直展示最后一页的解决方案源码分析亲测有效

Posted 小雨同学的服务器果然有问题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHPYii2使用ActiveDataProvider超出页码一直展示最后一页的解决方案源码分析亲测有效相关的知识,希望对你有一定的参考价值。

项目场景:

ActiveDataProvider一般配合视图的GridView展示数据的列表页,并在列表下方展示GridView自带渲染的分页组件。


问题描述:

默认情况下,当在地址栏输入页码大于现有列表总页码下,ActiveDataProvider给返回的数据默认是最后一页的数据。

有些场景下,我们需要了解是否分页已经达到了最后一页,所以不需要返回最后一页的数据,而是直接返回空数据。


原因分析:

源码分析:ActiveDataProvider使用的Pagination有个值validatePage默认是true。

源码位置vendor/yiisoft/yii2/data/Pagination.php

    /**
     * @var bool whether to check if [[page]] is within valid range.
     * When this property is true, the value of [[page]] will always be between 0 and ([[pageCount]]-1).
     * Because [[pageCount]] relies on the correct value of [[totalCount]] which may not be available
     * in some cases (e.g. MongoDB), you may want to set this property to be false to disable the page
     * number validation. By doing so, [[page]] will return the value indexed by [[pageParam]] in [[params]].
     */
    public $validatePage = true;


解决方案:

在初始化ActiveDataProvider的时候将Pagination的validatePage改为false。

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
            'Pagination'=>[
                'validatePage'=>false
            ]
        ]);

问题解决!

以上是关于PHPYii2使用ActiveDataProvider超出页码一直展示最后一页的解决方案源码分析亲测有效的主要内容,如果未能解决你的问题,请参考以下文章

PHPYii2的Cache组件cachePath遇到的坑,亲测可用

PHPYii2的Cache组件cachePath遇到的坑,亲测可用

在 php yii2.0 中集成 android firebase 通知

yii2 kartik select2 小部件不显示列表的第一个元素

开源新项目GitTest.com,欢迎大牛,小牛,菜鸟,同学加入发PR

如果我使用 select2 小部件,如何发布表中记录的实际主键而不是 php Yii2 中的数组索引?