You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 7 分页onEachSide()方法不生效,如何设置两侧仅显示2个分页链接?

问题原因

Laravel 分页器的 onEachSide() 方法仅控制当前页相邻两侧的分页链接展示数量,默认渲染逻辑还会固定在分页栏首尾各展示1个首页、尾页链接,因此设置onEachSide(2)时,会出现「当前页 + 两侧各2个链接 + 省略号 + 首页/尾页链接」的展示效果,和仅展示相邻2个链接的预期不符。

解决方案

方案1:自定义分页视图(最推荐,全局生效可灵活调整)

  1. 首先导出Laravel默认的分页视图文件,执行命令:
    php artisan vendor:publish --tag=laravel-pagination
    执行完成后,分页视图会生成到 resources/views/vendor/pagination/ 目录下,你可以根据项目使用的UI框架修改对应文件,比如用Bootstrap就改bootstrap-4.blade.php,用Tailwind就改tailwind.blade.php。
  2. 打开对应的分页视图文件,删除掉首尾固定展示首页、尾页链接的逻辑段,只保留当前页前后相邻页码的渲染逻辑即可,也可以直接调整逻辑仅展示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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 08:27:01