Laravel中如何在URL中传递每页显示的列表条数?
解决Laravel分页中通过URL参数指定每页条数的问题
1. 修正控制器代码
不需要额外写路由或者单独方法,直接在原有index方法里处理即可:
public function index() { // 从URL查询参数获取per_page,未传参时默认用3 $perPage = request()->get('per_page', 3); $listings = Listing::latest() ->filter(request(['tag', 'search'])) ->paginate($perPage); // 让分页链接自动带上per_page参数,避免切换页码时丢失设置 $listings->appends(['per_page' => $perPage]); return view('listings.index', compact('listings')); }
2. 移除多余路由
你之前创建的Route::get('/per_page/{perPage}', ...)路由可以删掉,我们用查询参数(?per_page=5这种形式)更灵活,直接访问原列表页面并带上参数即可生效,比如/listings?per_page=5。
3. 视图无需修改
index.blade.php里的{{$listings->links()}}保持原样就行,上面的appends方法已经让分页链接自动带上per_page参数,点击分页按钮时URL会保留这个设置,不会重置回默认条数。
为什么之前的尝试没成功?
- 直接换变量但没正确获取请求参数:你可能没从
request里拿到per_page值,或者没设置默认值导致参数为空报错。 - 额外路由没必要:路由参数(
/per_page/3)和查询参数(?per_page=3)是两种传参方式,这里用查询参数不需要改动原有路由结构,更适配分页场景。
内容的提问来源于stack exchange,提问作者Xenochrist
相关产品推荐
相关产品推荐

