Laravel 5.7分页onEachSide设置未生效问题排查与解决
看起来你遇到的是分页配置与视图渲染不匹配的问题,我来帮你一步步排查修复:
第一步:验证控制器配置是否正确传递到视图
首先确认onEachSide(2)的设置确实传递到了视图层。在你的分页代码附近,临时添加一行测试代码:
<p>当前onEachSide值:{{ $materials->onEachSide() }}</p> {{ $materials->links() }}
访问页面后,如果显示的是2,说明控制器的配置没问题,问题出在分页视图的渲染逻辑上;如果不是2,需要检查控制器里是否有其他地方修改了$materials变量(从你的代码来看应该没有,但还是确认下更稳妥)。
第二步:修复分页视图的渲染逻辑
Laravel 5.7默认使用Bootstrap 4的分页视图,但如果项目里的分页视图是自定义的,或者是旧版本遗留的,可能没有正确使用onEachSide()的值来控制显示的页码数量。
方法1:重新发布官方默认分页视图
运行Artisan命令重新生成官方的分页视图,确保逻辑是最新的:
php artisan vendor:publish --tag=laravel-pagination
执行后,你会在resources/views/vendor/pagination/目录下看到官方的分页视图文件(默认是bootstrap-4.blade.php),这个文件已经正确实现了onEachSide()的逻辑,会严格遵循你设置的数值控制两侧显示的页码数。
方法2:修改自定义分页视图(如果有)
如果你用了自定义的分页视图文件,打开它找到页码循环的部分,把硬编码的两侧页码数量替换为$paginator->onEachSide()。比如原来的代码可能是:
@for ($i = 1; $i <= $paginator->lastPage(); $i++) @if ($i >= $paginator->currentPage() - 3 && $i <= $paginator->currentPage() + 3) <!-- 页码渲染代码 --> @endif @endfor
改成:
@for ($i = 1; $i <= $paginator->lastPage(); $i++) @if ($i >= $paginator->currentPage() - $paginator->onEachSide() && $i <= $paginator->currentPage() + $paginator->onEachSide()) <!-- 页码渲染代码 --> @endif @endfor
修改后,视图就会遵循你在控制器里设置的onEachSide(2)配置了。
第三步:确认响应式布局
官方的Bootstrap 4分页视图本身是响应式的,会在小屏设备上自动调整布局,不会出现溢出问题。如果你用的是自定义视图,要确保添加了响应式的CSS类(比如Bootstrap的pagination类),或者使用flex布局来适配小屏设备。
完成以上步骤后,你的分页应该会正确显示当前页两侧各2个页码,小屏设备的布局溢出问题也会得到解决。
内容的提问来源于stack exchange,提问作者Pieter

