当前位置:网站首页>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,可以正常分页了。
边栏推荐
猜你喜欢

Unit 10 Continuous Tuning

Flask框架的搭建及入门
![[ROS] The difference between roscd and cd](/img/a8/a1347568170821e8f186091b93e52a.png)
[ROS] The difference between roscd and cd

paddleocr window10初体验

【c】小游戏---五子棋之井字棋雏形

使用云GPU+pycharm训练模型实现后台跑程序、自动保存训练结果、服务器自动关机
![[ROS] (05) ROS Communication - Node, Nodes & Master](/img/f5/c541259b69a0db3dc15a61e87f0415.png)
[ROS] (05) ROS Communication - Node, Nodes & Master

Visual Studio配置OpenCV之后,提示:#include<opencv2/opencv.hpp>无法打开源文件

Hands-on OCR (1)

STM32(F407)—— 堆栈
随机推荐
[ROS](02)创建&编译ROS软件包Package
Hands-on OCR (1)
run yolov5
Chapter6 visualization (don't want to see the version)
verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第十二章)
C语言初级—判断一个数是不是素数(函数封装)
[ROS] (05) ROS Communication - Node, Nodes & Master
C语言一维数组练习——将m个元素移动到数组尾部
yolov5 improvement (1) Add attention focus mechanism
C语言初级—从键盘接收一个整形并逆序输出
redis分布式锁和看门狗的实现
drf源码分析与全局捕获异常
Unit 12 associated serialization
[ROS] (04) Detailed explanation of package.xml
Verilog学习 系列
第十二单元 关联序列化处理
St. Regis Takeaway Notes - Lecture 10 Swagger
YOLOv7使用云GPU训练自己的数据集
深度学习框架pytorch快速开发与实战chapter4
Flask框架的搭建及入门