Laravel 的 Database 数据库模块默认提供了一个分页查询函数 paginate
,它默认返回的翻页地址是 /path?page=1
这种格式,本文总结了该如何根据需要来自定义这个地址。
首先复制分页模板到项目的资源目录:
php artisan vendor:publish --tag=laravel-pagination
命令执行完成后,项目会多出一个 resources/views/vendor/pagination
目录。里面就是各种可用的分页模板。
resources/views/vendor/pagination
├── bootstrap-4.blade.php
├── default.blade.php
├── semantic-ui.blade.php
├── simple-bootstrap-4.blade.php
├── simple-default.blade.php
├── simple-tailwind.blade.php
└── tailwind.blade.php
不同的 Laravel 版本所包含的文件可能不同,以上是 7.2 版本的 Laravel 所包含的分页模板。在 7.2 版本中,Laravel 默认使用的分页模板为 bootstrap-4.blade.php
。来看看这个文件中和页码相关的代码:
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="page-item active" aria-current="page">
<span class="page-link">{{ $page }}</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $url }}">{{ $page }}</a>
</li>
@endif
@endforeach
@endif
把 a
标签中 href
的属性修改为自己需要定义的地址就可以了。比如我之前文章默认的翻页地址格式是这样的:/posts?page=2
,我想定义为 /posts/2
这种格式,就可以这样来修改:
<a class="page-link" href="/posts/{{ $page }}">{{ $page }}</a>
这样就等于是不使用分页对象提供的 $url
变量。同时也可以看出,要自定义 Laravel 分页地址更合理的方案应该是自定义一个数据分页对象,并重定义相关的方法。所以本文分享的只能算是一个「投机取巧」的方案,请自己衡量并谨慎使用。