当前位置:网站首页>ThinkPHP5.0内置分页函数Paginate无法获取POST页数问题的解决办法
ThinkPHP5.0内置分页函数Paginate无法获取POST页数问题的解决办法
2022-08-02 14:03:00 【星沉大海@T】
场景
最近在为一个老平台做APP开发,后台系统使用的是 TP5.0,在写一个数据统计模块的 API,需要用到分页函数,传参时个人喜欢用 POST 方法,结果 Paginate 方法却只能获取第1页的数据,而前端传过去的 page 值是正常的。
说实在的 GET 真的不太优雅,所以很不喜欢这种用法,那就只能刨根问题去找问题了。
分析
因为我传到服务器的数据是没有问题的,测试API发现,更换成 GET 却可以正确分页,而 POST 只能获取第1页数据。
看来问题出在 Paginate 里面,这应该是 TP5.0 框架的 bug ,Paginate 是个类,路径是 thinkphp/library/think/Paginator.php 。
继续排查 Paginate,问题是出在下面 自动获取当前页码 这个函数:
/**
* 自动获取当前页码
* @param string $varPage
* @param int $default
* @return int
*/
public static function getCurrentPage($varPage = 'page', $default = 1) {
$page = Request::instance()->request($varPage);
if (filter_var($page, FILTER_VALIDATE_INT) !== false && (int) $page >= 1) {
return $page;
}
return $default;
}
这里面 $page = Request::instance()->request($varPage); 并不能正确获取 page 的值, 主要的问题出在 Request::instance()->request, request() 方法默认只能取到 GET 方法的参数,却无法获取 POST 的数据,这便是问题的根源。
我想应该是平台开发时,这个 BUG 还没有来得及修复,当时开发人员也懒得去修复,所以后台的 API 全都使用了 GET 方法。
解决
找到问题事情就好解决了,我们知道 TP5.0 中助手函数 input() 是能正常获取到 GET 和 POST 数据的,所以只需要修改取值方法这段即可,也就是把:
$page = Request::instance()->request($varPage);
改为:
$page = input($varPage);
保存上传到服务器,OK,可以正常分页了。
边栏推荐
猜你喜欢
随机推荐
[ROS] (01) Create ROS workspace
C语言日记 5 运算符和表达式
Flask上下文,蓝图和Flask-RESTful
The language of initial
verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第十一章)
[ROS] Introduction to common tools in ROS (to be continued)
8580 Merge linked list
yolov5,yolov4,yolov3乱七八糟的
第十四单元 视图集及路由
【c】小游戏---五子棋之井字棋雏形
paddleocr window10 first experience
C语言初级—判断一个数是不是素数(函数封装)
drf source code analysis and global catch exception
Unit 13 Mixing in View Base Classes
[ROS]ROS常用工具介绍(待续)
YOLOv7使用云GPU训练自己的数据集
The 2nd China Rust Developers Conference (RustChinaConf 2021~2022) Online Conference Officially Opens Registration
[ROS] (05) ROS Communication - Node, Nodes & Master
Flask框架的搭建及入门
The specific operation process of cloud GPU (Hengyuan cloud) training
![[ROS]ROS常用工具介绍(待续)](/img/ea/e390106f750bf697e62a3a296014d2.png)






![[ROS] The difference between roscd and cd](/img/a8/a1347568170821e8f186091b93e52a.png)

CMakeLists.txt详解](/img/34/577c729f06748f625ca0c223496d48.png)