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

举报
小雨青年 发表于 2022/03/30 00:08:20 2022/03/30
【摘要】 项目场景: ActiveDataProvider一般配合视图的GridView展示数据的列表页,并在列表下方展示GridView自带渲染的分页组件。 问题描述: 默认情况下,当在地址栏输入页码大...

项目场景:

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;


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

解决方案:

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

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

问题解决!
在这里插入图片描述

文章来源: coderfix.blog.csdn.net,作者:小雨青年,版权归原作者所有,如需转载,请联系作者。

原文链接:coderfix.blog.csdn.net/article/details/120650749

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。