当前位置:网站首页>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] Compiling packages packages encounters slow progress or stuck, use swap
- 第三单元 视图层
- Unit 7 ORM table relationships and operations
- C语言日记 5、7setprecision()问题
- 猜数字游戏,猜错10次关机(srand、rand、time)随机数生成三板斧(详细讲解!不懂问我!)
- Deep learning framework pytorch rapid development and actual combat chapter4
- C语言一维数组练习——将m个元素移动到数组尾部
- run yolov5
- drf routing component Routers
- 【ROS】工控机的软件包不编译
猜你喜欢

yolov5改进(一) 添加注意力集中机制

跑跑yolov5吧

函数递归和动态内存初识

Deep learning framework pytorch rapid development and actual combat chapter4

(ROS) (03) CMakeLists. TXT, rounding

Creating seven NiuYun Flask project complete and let cloud

使用云GPU+pycharm训练模型实现后台跑程序、自动保存训练结果、服务器自动关机

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

8581 线性链表逆置

C语言一维数组练习——将m个元素移动到数组尾部
随机推荐
Go语言初始
8580 合并链表
[ROS]roscd和cd的区别
Paddle window10 environment using conda installation
Flask framework in-depth
MobileNet ShuffleNet & yolov5 replace backbone
第八单元 中间件
重新学习编程day1 【初始c语言】【c语言编写出计算两个数之和的代码】
利用c语言实现对键盘输入的一串字符的各类字符的计数
Basic operations of 8583 sequential stack
第四单元 路由层
Unit 15 Paging, Filtering
8583 顺序栈的基本操作
window10 lower semi-automatic labeling
Flask-RESTful请求响应与SQLAlchemy基础
chapter7
Flask request application context source code analysis
MarkDown syntax summary
瑞吉外卖笔记——第08讲读写分离
yolov5 improvement (1) Add attention focus mechanism