第一反应是$list不是paginator实例,已被解包为数组或collection;应检查是否调用了toarray()、all()、items()或foreach等导致“解包”的操作,确保控制器中$list = usermodel::paginate(15)未被链式中断,模板中用{$list->render|raw}输出。

直接在模板里用 {$list->render()} 却输出空白,第一反应不是样式问题,而是 $list 根本就不是 Paginator 实例——它已经被“解包”成数组或 Collection 了。
检查 $list 是否为 Paginator 对象
在控制器中加一行调试代码:
dump($list); 或 halt(get_class($list));
如果输出是 think\Paginator(TP8.1.4 中实际类名可能是 think\paginator\driver\Bootstrap 或 think\paginator\driver\Simple),说明对象正常;
如果输出是 think\Collection、array 或 stdClass,那分页对象已经丢失,render() 必然失败或静默空白。
常见导致“解包”的操作
- 写了
->toArray()、->all()、->items()或foreach ($list as ...)后再 assign 给模板 - 误用了
select():如UserModel::where(...)->select()->paginate(10)——select()已执行查询,后面paginate()无效 - 数据库配置中开启了
'collection' => true,会强制将结果转为 Collection,应设为false - 用了
Db::query()或原生 SQL 查询后手动 paginate,这不支持,必须基于 Query 构造器
确保 $list 始终是原始 paginate 结果
控制器中只做一件事:
$list = UserModel::where('status', 1)->paginate(15);
不接任何链式方法,不遍历,不转换,不缓存中间结果。
然后 $this->assign('list', $list); 直接传入模板。
模板中验证分页元信息是否可读
在模板里临时加几行测试输出:
{$list->total() ?: 'total() 不可用'}{$list->currentPage() ?: 'currentPage() 不可用'}{$list->lastPage() ?: 'lastPage() 不可用'}
只要其中任一报错或为空,就确认不是 Paginator 对象。能正常输出数字,才说明 render() 有基础运行条件。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











