当前位置:网站首页>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,可以正常分页了。
边栏推荐
- Flask contexts, blueprints and Flask-RESTful
- 二级指针,数组指针,指针数组和函数指针
- [ROS](03)CMakeLists.txt详解
- Flask框架
- verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第九章)
- C语言初级—常见问题(100~200素数,计算1+11+111+...,从键盘获取一个数并输出有几个位)
- Visual Studio配置OpenCV之后,提示:#include<opencv2/opencv.hpp>无法打开源文件
- 第十四单元 视图集及路由
- 我的第一篇博客
- The specific operation process of cloud GPU (Hengyuan cloud) training
猜你喜欢
随机推荐
C语言字符串——关于指针
关于密码加密的一点思路
STM32 (F407) - stack
Verilog Learning Series
第十单元 前后连调
drf view component
verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第七章)
c语言用scanf出错不安全的解决办法
Visual Studio配置OpenCV之后,提示:#include<opencv2/opencv.hpp>无法打开源文件
重新学习编程day1 【初始c语言】【c语言编写出计算两个数之和的代码】
Creating seven NiuYun Flask project complete and let cloud
Introduction and use of Haystack
yolov5,yolov4,yolov3 mess
C语言日记 5 运算符和表达式
Briefly write about the use and experience of PPOCRLabel
[ROS] The software package of the industrial computer does not compile
Unit 6 meet ORM
[ROS] (04) Detailed explanation of package.xml
drf routing component Routers
跑跑yolov5吧



ROS通信 —— 节点,Nodes & Master](/img/f5/c541259b69a0db3dc15a61e87f0415.png)





