Laravel无模型分页:Blade模板中{{$items->links()}}无法正常使用
嘿,我之前也踩过Laravel手动分页的坑!你的问题主要出在分页类的参数顺序错了,而且没有正确配置分页的请求路径和当前页码,导致Blade里的{{$items->links()}}无法生成正确的链接。
先理清楚核心问题:
你现在用的Paginator类,构造参数顺序是:$items(当前页数据)、$perPage(每页条数)、$currentPage(当前页码,可选)、$options(配置数组)。但你的代码里把总记录数当成了perPage,把10当成了currentPage,这完全搞反了!而且你需要的是带总页数的完整分页,其实更适合用LengthAwarePaginator(它支持显示所有页码、总页数)。
正确的实现步骤:
1. 控制器里正确构建分页实例
首先,我们需要先计算当前页码、截取当前页的数据,再创建分页对象:
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; // 假设$risultati是你的完整数据集合(比如Collection实例) $risultati = ...; // 配置分页参数 $perPage = 10; // 每页显示10条 $currentPage = request()->get('page', 1); // 从请求中获取当前页码,默认1 $offset = ($currentPage - 1) * $perPage; // 计算数据偏移量 // 截取当前页的数据 $currentPageItems = $risultati->slice($offset, $perPage); // 创建LengthAwarePaginator实例 $paginator = new LengthAwarePaginator( $currentPageItems, $risultati->count(), // 总记录数 $perPage, $currentPage, [ 'path' => request()->url(), // 设置分页链接的基础路径 'query' => request()->query(), // 保留请求中的查询参数(比如搜索关键词) ] );
2. 传递分页对象到视图
把分页对象传给Blade视图:
return view('你的视图名称', ['items' => $paginator]);
3. Blade模板中调用分页链接
现在你就可以正常使用{{$items->links()}}了,Laravel会自动生成完整的分页导航,包括页码、上一页/下一页按钮,而且链接会自动带上page参数和其他查询参数。
如果你确实想用简单分页(Paginator类)
如果只需要上一页/下一页的简单分页,也可以用Paginator,但同样要修正参数顺序并配置路径:
use Illuminate\Pagination\Paginator; $paginator = new Paginator( $currentPageItems, $perPage, $currentPage, [ 'path' => request()->url(), 'query' => request()->query(), ] );
不过这种情况下links()只会显示上一页和下一页按钮,不会显示具体页码。
为什么之前的代码不生效?
- 参数顺序错误:你把总记录数传给了
perPage参数,导致每页显示所有数据,分页失去意义; - 没有配置
path:分页视图不知道该生成哪个路径的分页链接,所以无法正确渲染; - 未正确设置当前页码:默认会用1,但如果用户点击分页链接,页码参数无法被正确识别。
这样调整后,你的分页应该就能正常工作啦!
内容的提问来源于stack exchange,提问作者JahStation
相关产品推荐
相关产品推荐

