最稳妥的方式是新建继承bootstrap的自定义分页器类,重写getfirstbutton()和getlastbutton()方法替换文案,调用render()时显式传入完整命名空间类名。

ThinkPHP 6 的 render() 方法不支持直接替换首页/尾页文字
默认的 Bootstrap5 或 Bootstrap4 分页模板里,首页(First)和尾页(Last)是硬编码在视图里的,render() 只负责渲染,不提供钩子改写这两个按钮。想把“首页”换成“首页 »”,或把“尾页”改成“« 尾页”,不能靠配置项或参数传入解决。
常见错误是试图在控制器里调用 $page->setConfig(['prev_text' => '上一页']) —— 这个配置只影响上一页/下一页,对首页/尾页无效。
-
setConfig()中的first_text和last_text在 TP6.0+ 版本中已被移除,设了也不生效 - TP6 默认分页器类
think\Paginator\Bootstrap没有公开方法修改首页/尾页文案 - 直接覆盖
vendor/topthink/think-orm/src/paginator/driver/Bootstrap.php属于破坏性修改,升级会丢失
自定义分页器类继承 Bootstrap 并重写 getFirstButton() 和 getLastButton()
最稳妥的方式是新建一个分页器类,继承原 Bootstrap,只重写两个方法。注意路径和命名空间要匹配你项目的规范(如放在 app\common\paginator\CustomBootstrap.php)。
<?php namespace app\common\paginator;
use think\Paginator\Bootstrap;
class CustomBootstrap extends Bootstrap
{
protected function getFirstButton($text = null): string
{
$text = $text ?: '首页 »';
if ($this->currentPage() getDisabledTextWrapper($text);
}
$url = $this->url(1);
return $this->getPageLinkWrapper($url, $text);
}
protected function getLastButton($text = null): string
{
$text = $text ?: '« 尾页';
if ($this->currentPage() >= $this->lastPage()) {
return $this->getDisabledTextWrapper($text);
}
$url = $this->url($this->lastPage());
return $this->getPageLinkWrapper($url, $text);
}
}
关键点:
- 不要改动
render()或整个模板逻辑,只干预按钮生成环节 - 保持原有禁用态、URL 构造、HTML 包裹逻辑,避免破坏样式或跳转
- 若需支持多语言,可把文案抽成配置,例如
config('paginate.first_text', '首页 »')
在查询时通过 render() 显式指定自定义分页器类
TP6 不再自动读取全局分页器配置来切换实现类,必须在调用 render() 时传入完整类名(带命名空间)。
控制器示例:
$users = User::paginate(15);
return view('index', ['users' => $users]);
模板中(如 view/index.html)这样调用:
{$users|render='app\common\paginator\CustomBootstrap'}
注意:
- 不能写成
{$users|render='CustomBootstrap'},必须是完整命名空间 - 如果使用
->render()链式调用(比如 API 返回 JSON),需先实例化:(new \app\common\paginator\CustomBootstrap($users))->render() - 若项目启用了模板缓存,改完后记得清空
runtime/view/下缓存文件,否则旧模板仍生效
兼容性与扩展建议:避免覆盖默认 Bootstrap 类名
有些教程建议直接在 config/paginate.php 里改 'type' => 'Bootstrap' 为自定义类名,但 TP6.3+ 已不支持该配置项生效——它只用于 ORM 初始化时的兜底,默认就是 Bootstrap,且无法被配置覆盖。
真正需要复用的地方(比如多个模板都要用同一套文案),可以封装一个助手函数:
// app/common/helper.php
function custom_paginate_render($paginator)
{
return $paginator->render('app\common\paginator\CustomBootstrap');
}
然后模板里写 {:custom_paginate_render($users)},比重复写长命名空间更安全。
如果未来要适配 Tailwind 或自定义 CSS 框架,只需新增一个继承类,不用动已有逻辑。首页/尾页文案这种细节,恰恰是最容易因版本升级或主题切换被忽略的点。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











