laravel分页html模板需通过php artisan vendor:publish --tag=laravel-pagination发布至resources/views/vendor/pagination/后修改default.blade.php等文件,并在config/view.php中配置'pagination' => '模板名'或使用$users->links('pagination::xxx')指定,同时用withquerystring()或appends()保留查询参数,修改后需执行php artisan view:clear。

分页 HTML 模板在哪改?
Laravel 分页的 HTML 输出由 Blade 模板控制,不是靠 CSS 或 JS 覆盖。默认模板在 resources/views/vendor/pagination 下,但这个目录**不会自动创建**——你得手动发布。
执行这条命令才能拿到可修改的模板文件:
php artisan vendor:publish --tag=laravel-pagination发布后你会看到
resources/views/vendor/pagination/default.blade.php(或 tailwind.blade.php,取决于 Laravel 版本)。
- 改这个文件就能彻底控制每一页链接、上一页/下一页按钮、禁用状态的 class 和结构
- 别直接改
vendor/里的源码,一升级就丢 - 如果你用的是 Bootstrap 5,Laravel 9+ 默认不带对应模板,得自己仿照
default.blade.php写一个,再在config/view.php的pagination配置项里指定它
怎么让分页器用自定义模板?
Laravel 不会自动读你改完的模板,必须显式告诉它用哪个。最常用的方式是全局设置,默认走你发布的那个 default.blade.php:
在 config/view.php 中找到 'pagination' => 'default' 这行,改成你的模板名(不含 .blade.php 后缀):
'pagination' => 'bootstrap-5'前提是你的模板路径是
resources/views/vendor/pagination/bootstrap-5.blade.php。
- 也可以单次调用时覆盖:
$users->links('pagination::bootstrap-5') - 注意命名空间写法:
pagination::xxx对应resources/views/vendor/pagination/xxx.blade.php - 如果模板路径不对,会报错:
View [pagination::xxx] not found
分页链接带参数(比如搜索关键词)怎么保留?
默认 appends() 是最稳妥的方案,但它容易漏掉动态参数或重复追加。
比如用户在搜索页分页,URL 是 /users?search=john&status=active,点击第二页时,链接却变成 /users?page=2——参数丢了。
- 在控制器里传参时用
withQueryString()(Laravel 9.2+):$users = User::where(...)->paginate(10)->withQueryString() - 旧版本用
appends(request()->query()),但要注意避免重复添加page参数,否则 URL 变成?page=1&page=2 - 更安全的做法是白名单过滤:
appends(request()->only(['search', 'status', 'sort'])) - 别用
appends($_GET),可能带入危险参数或空值
为什么自定义后分页链接不跳转? 常见原因是模板里用了错误的 URL 构造方式,或者前端 JS 干预了默认行为。
检查你的自定义模板里是否还在用过时的 $paginator->url($page)。Laravel 8+ 推荐统一用 $paginator->link($page) 或更推荐的 $paginator->url($page)(它已修复 query 参数继承问题),但关键是:要确保生成的 href 是完整 URL,而不是相对路径。
- 如果用了
url()或route()手动拼,很容易丢查询参数——优先交给$paginator->url($i)处理 - 某些前端框架(如 Alpine.js、Turbo)会拦截
<a></a>点击,导致页面不刷新;加target="_self"或移除相关指令可验证 - 浏览器控制台看 Network,点分页链接时是否发出 GET 请求;没发请求,基本就是 JS 拦截了
php artisan view:clear,不然永远看不到效果。









