ThinkPHP6模板中直接输出分页HTML的正确写法是{$list|raw}或{$page|raw},前者要求控制器传入完整分页对象$list,后者要求控制器先调用$list->render()并assign为$page;不可在模板中直接调用{$list->render()}或使用{:dump()},否则会报错或输出转义文本。

ThinkPHP6 模板中直接输出分页 HTML 的写法
控制器里调用 paginate() 后,模板里必须用 |raw 过滤器才能正确渲染分页 HTML,否则会显示转义后的字符串(比如 <ul><li>1</li></ul> 被当成纯文本)。这是最常踩的坑。
正确写法只有两种等效方式:
-
{$list|raw}—— 前提是控制器传入的是完整的分页对象$list -
{$page|raw}—— 前提是控制器提前调用$list->render()并 assign 为$page
注意:不能写成 {:dump($list)} 或 {$list->render()} 直接在模板里调用方法,TP6 默认禁用模板内执行方法调用,会报错或静默失败。
ThinkPHP5 模板中 {$page|raw} 不生效的常见原因
不是模板写法错了,而是控制器没做对。TP5 的 render() 返回的是 HTML 字符串,但如果你用了 assign('page', $list)(把整个分页对象传过去),模板里写 {$page|raw} 就只会输出对象 toString 结果,不是分页 HTML。
立即学习“PHP免费学习笔记(深入)”;
必须确保控制器里这三步都到位:
- 调用
$list = Model::paginate(10)获取分页对象 - 显式提取 HTML:
$page = $list->render() - 单独 assign:
$this->assign('page', $page)
漏掉第二步,$page 就不是字符串,|raw 也救不回来。
ThinkPHP3.2 分页 HTML 渲染时链接跳转 404
这是因为 \Think\Page 类生成的分页链接默认按 PATHINFO 模式拼接,而你的 URL 模式可能设成了兼容模式(URL_MODEL => 3)或重写未生效。页面能显示,但点击页码后地址变成 /index.php?m=Home&c=Index&a=index&p=2 这类参数式链接,服务器找不到路由。
解决办法有两个:
- 改配置:在
config.php加'URL_MODEL' => 1(PATHINFO 模式),并确认 Apache/Nginx 重写规则已启用 - 手动注入参数:创建
Page实例后,设置$Page->parameter = $_GET或具体键值数组,让分页类知道该保留哪些查询参数
不处理这个,分页按钮看起来正常,点下去全是 404 或刷新到首页。
分页模板变量名写错导致空白输出
模板里写 {$list|raw} 却没内容?先检查控制器 assign 的变量名是否一致。TP 系统不会报错,只是默默忽略不存在的变量。
典型错误组合:
- 控制器写
$this->assign('data', $list),模板却写{$list|raw} - 控制器写
$this->assign('page', $list->render()),模板却写{$pages|raw}(多了一个 s)
变量名大小写也要严格匹配,$Page 和 $page 是两个变量。这种问题没有提示,只能自己逐行核对。



















