ThinkPHP中可通过五种方式设置分页每页记录数:一、paginate(20)直接传整数;二、传含list_rows的数组;三、配置config/paginate.php全局生效;四、校验URL参数size动态设定;五、在查询链末尾调用paginate(12)并传false避免page重复解析。

如果您在使用ThinkPHP开发应用时需要控制分页每页显示的记录数量,但发现默认值不符合业务需求,则需通过多种方式显式设置list_rows或等效参数。以下是实现该目标的具体方法:
一、在paginate()方法中直接传入整数
此方式最直观,适用于固定每页条数的场景,框架将自动提取当前页码并生成分页对象。
1、在控制器中调用模型或Db门面的paginate()方法,并传入所需数值作为第一个参数。
2、确保该数值为合法整型,例如15、20或50,避免使用未校验的用户输入直接传入。
立即学习“PHP免费学习笔记(深入)”;
3、示例代码:$list = User::paginate(20);
二、使用配置数组方式传参
该方式支持同时设定每页条数、当前页码、URL查询参数保留等高级选项,适合需动态控制或保持筛选条件的列表页。
1、构造包含list_rows键的关联数组,值为期望的每页数量。
2、通过input()函数从请求中安全获取page参数,并强制转换为整型。
3、调用paginate()时传入该数组,例如:$list = User::paginate(['list_rows' => 10, 'page' => input('page/d', 1), 'query' => request()->param()]);
三、通过全局配置文件统一设定
适用于全站所有分页组件采用相同默认值的场景,修改后无需在每个控制器中重复声明。
1、打开应用根目录下的config/paginate.php配置文件(若不存在可新建)。
2、写入以下结构的配置项:'list_rows' => 15,
3、保存后,所有未显式传入list_rows的paginate()调用将自动采用该值。
四、从URL参数动态获取并校验
允许用户通过?size=30等方式自定义每页数量,但必须进行白名单限制与类型强转,防止恶意参数导致性能问题。
1、使用input()函数读取size参数,默认值设为15。
2、用in_array()校验其是否属于预设合法值集合[5, 10, 20, 50]。
3、仅当校验通过才用于分页,否则兜底为15,示例:$size = in_array(input('size/d', 15), [5,10,20,50]) ? input('size/d', 15) : 15; $list = User::paginate($size, false, ['page' => input('page/d', 1)]);
五、在模型查询链式调用中嵌入
适用于需要结合复杂条件(如where、order、with)后再执行分页的场景,保持逻辑连贯性。
1、先构建查询条件链,例如Db::name('article')->where('status', 1)->order('id desc')。
2、在链末尾调用paginate()并传入数字参数,如->paginate(12)。
3、注意此时不能省略false参数,否则URL中的page会被重复解析,示例:$list = Db::name('article')->where('status', 1)->order('id desc')->paginate(12, false, ['page' => input('page/d', 1)]);



















