当前位置:网站首页>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,可以正常分页了。
边栏推荐
- yolov5 improvement (1) Add attention focus mechanism
- verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第十二章)
- Unit 15 Paging, Filtering
- 动手学ocr(一)
- Flask框架深入二
- 函数递归和动态内存初识
- C语言日记 7 输入/输出格式控制
- Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin [id ‘c
- yolov5,yolov4,yolov3乱七八糟的
- C语言初级—水仙花数
猜你喜欢
随机推荐
verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第十章)
(ROS) (03) CMakeLists. TXT, rounding
函数递归和动态内存初识
我的第一篇博客
Unit 6 meet ORM
初识c语言指针
run yolov5
Haystack的介绍和使用
跑跑yolov5吧
【c】大学生在校学习c语言常见代码
Flask contexts, blueprints and Flask-RESTful
redis延时队列
[ROS] (05) ROS Communication - Node, Nodes & Master
深度学习框架pytorch快速开发与实战chapter3
jwt(json web token)
How does Apache, the world's largest open source foundation, work?
8581 Linear linked list inversion
Visual Studio配置OpenCV之后,提示:#include<opencv2/opencv.hpp>无法打开源文件
Flask framework in-depth two
C语言——断言assert的使用