201655-修复Matchexchange-My接口分页参数问题.md 2.4 KB

修复Matchexchange-My接口分页参数问题

任务时间

  • 开始时间:2025-06-20 16:54:21
  • 完成时间:2025-06-20 16:55:53

问题描述

Matchexchange-My接口在客户端没有传递per_page字段时,每页条数错误显示为1而不是默认的20条。

问题分析

通过查看日志发现:

  1. 客户端请求:{"page":{"page":"1"}} - 只传了页码,没有传per_page字段
  2. 服务端响应:"perPage":"1" - 每页条数显示为1而不是预期的20

原因分析

MyHandler.php中的分页参数处理逻辑:

// 解析分页参数
$pageNum = $page ? $page->getPage() : 1;
$pageSize = $page ? $page->getPerPage() : 20;

// 限制分页大小,确保不为0
$pageSize = max(min($pageSize, 100), 1);

当客户端传了page对象但没有传per_page字段时:

  • $page->getPerPage()返回protobuf的默认值0
  • 经过max(min(0, 100), 1)处理后变成1
  • 导致每页条数被设置为1而不是默认的20

修复方案

修改分页参数处理逻辑,当per_page为0时明确使用默认值20:

修改前代码

// 解析分页参数
$pageNum = $page ? $page->getPage() : 1;
$pageSize = $page ? $page->getPerPage() : 20;

// 限制分页大小,确保不为0
$pageSize = max(min($pageSize, 100), 1);
$pageNum = max($pageNum, 1);

修改后代码

// 解析分页参数
$pageNum = $page ? $page->getPage() : 1;
$pageSize = $page ? $page->getPerPage() : 20;

// 当per_page为0时使用默认值20(protobuf未传该字段时返回0)
if ($pageSize <= 0) {
    $pageSize = 20;
}

// 限制分页大小
$pageSize = min($pageSize, 100);
$pageNum = max($pageNum, 1);

修复验证

使用重放命令验证修复效果:

php artisan debug:reproduce-error request_1750409477275

修复前结果

  • 每页条数:1
  • 返回记录:1条
  • 总页数:2页

修复后结果

  • 每页条数:20
  • 返回记录:2条(全部记录)
  • 总页数:1页

文件修改

  • app/Module/AppGame/Handler/Matchexchange/MyHandler.php

提交信息

修复Matchexchange-My接口分页参数问题

- 修复当客户端未传per_page字段时,每页条数错误显示为1的问题
- 当protobuf的per_page字段为0时,正确使用默认值20
- 确保分页逻辑符合预期,避免数据显示不完整

相关问题

这个问题可能在其他使用类似分页逻辑的Handler中也存在,建议后续检查其他接口的分页参数处理逻辑。