Laravel 7 分页onEachSide()方法不生效,如何设置两侧仅显示2个分页链接?
问题原因
Laravel 分页器的 onEachSide() 方法仅控制当前页相邻两侧的分页链接展示数量,默认渲染逻辑还会固定在分页栏首尾各展示1个首页、尾页链接,因此设置onEachSide(2)时,会出现「当前页 + 两侧各2个链接 + 省略号 + 首页/尾页链接」的展示效果,和仅展示相邻2个链接的预期不符。
解决方案
方案1:自定义分页视图(最推荐,全局生效可灵活调整)
- 首先导出Laravel默认的分页视图文件,执行命令:
php artisan vendor:publish --tag=laravel-pagination
执行完成后,分页视图会生成到resources/views/vendor/pagination/目录下,你可以根据项目使用的UI框架修改对应文件,比如用Bootstrap就改bootstrap-4.blade.php,用Tailwind就改tailwind.blade.php。 - 打开对应的分页视图文件,删除掉首尾固定展示首页、尾页链接的逻辑段,只保留当前页前后相邻页码的渲染逻辑即可,也可以直接调整逻辑仅展示
onEachSide()控制范围内的页码,完全移除省略号后的额外首尾链接。
方案2:手动渲染分页链接(适合单页面定制,不影响全局)
如果仅需要在单个页面实现该效果,不需要修改全局配置,可以直接在Blade模板中手动遍历分页对象,自定义渲染逻辑,示例代码如下:
<div class="pagination"> {{-- 上一页按钮 --}} @if ($records->onFirstPage()) <span class="disabled">上一页</span> @else <a href="{{ $records->previousPageUrl() }}">上一页</a> @endif {{-- 仅渲染当前页前后各2个页码 --}} @for ($i = max(1, $records->currentPage() - 2); $i <= min($records->lastPage(), $records->currentPage() + 2); $i++) @if ($i == $records->currentPage()) <span class="active">{{ $i }}</span> @else <a href="{{ $records->url($i) }}">{{ $i }}</a> @endif @endfor {{-- 下一页按钮 --}} @if ($records->hasMorePages()) <a href="{{ $records->nextPageUrl() }}">下一页</a> @else <span class="disabled">下一页</span> @endif </div>
这种方式完全自定义,不会出现多余的省略号和首尾链接,完全符合只展示当前页两侧各2个链接的需求。
内容的提问来源于stack exchange,提问作者S. Shao
相关产品推荐
相关产品推荐

