TP5.1起已移除thinkPaginator类,必须改用Db或模型的paginate()方法获取分页对象,并在模板中调用total()、lastPage()等方法访问属性,不可直接读取属性或手动new Paginator。

直接报 Class 'thinkPaginator' not found,说明你正在手动实例化旧版分页类——TP5.1 起已彻底移除该类,所有分页必须走查询构造器的 paginate() 方法。
必须改掉手动 new Paginator 的写法
TP5.1 不再提供 thinkPaginator 类,也不支持传入原始数组 + 手动创建分页对象。以下写法全部失效:
new hinkPaginator($items, $listRows, $currentPage)new hinkPaginatordriverBootstrap(...)- 继承
hinkPaginator自定义分页类
正确路径只有一条:用 Db 或模型调用 paginate(),例如:
$list = Db::name('user')->where('status', 1)->paginate(15);$list = User::where('status', 1)->paginate(15);
模板里访问分页数据要改用方法调用
TP5.1+ 返回的是分页对象(非数组),但属性已封装为方法,不能直接读取 $list->total 或 $list->lastPage:
- ✅ 正确:
{$list->total()}、{$list->lastPage()}、{$list->currentPage()} - ❌ 错误:
{$list->total}、{$list->lastPage}、{$list->firstRow}(该属性已废弃)
如果模板中大量用了旧属性,可在控制器中做一层适配:
(示例)$pageData = $list->toArray() + [<br> 'current_page' => $list->currentPage(),<br> 'last_page' => $list->lastPage(),<br> 'total' => $list->total()<br>];<br>$this->assign('list', $pageData);
分页配置和 URL 参数要提前设置
TP5.1+ 的 paginate() 第三个参数不再是配置数组,而是布尔值(是否启用简单分页)。想自定义当前页参数名(如用 p 替代 page),需提前注册解析器:
- 在控制器开头或公共文件中加:
hinkPaginator::currentPageResolver(function () { return input('p/d', 1); }); - 如需携带额外查询参数(如
?status=1),使用:Db::name('user')->where('status', 1)->paginate(15, false, ['query' => request()->param()]);
确认没误用 toArray() 导致“解包”
常见错误是调用 paginate() 后又立刻 ->toArray() 或 ->all(),结果把分页对象转成普通数组,render() 等方法就没了:
- ❌ 错误:
$list = User::paginate(10)->toArray();→ 模板里{$list->render}报错 - ✅ 正确:
$list = User::paginate(10);→ 模板中保持原对象,用{:widget('think\paginator\driver\Bootstrap', $list)}渲染

















