
在 Laravel 中,只需在 Blade 模板中使用 {{ $users->links() }} 即可自动渲染带路由功能的分页导航,点击页码将通过 GET 请求(如 ?page=2)加载对应数据,无需手动编写链接或处理路由逻辑。
在 laravel 中,只需在 blade 模板中使用 `{{ $users->links() }}` 即可自动渲染带路由功能的分页导航,点击页码将通过 get 请求(如 `?page=2`)加载对应数据,无需手动编写链接或处理路由逻辑。
Laravel 提供了开箱即用的分页支持,你已在控制器中正确调用了 simplePaginate(3),这会返回一个 Illuminate\Pagination\LengthAwarePaginator(paginate())或 Illuminate\Pagination\SimplePaginator(simplePaginate())实例——二者均具备 .links() 方法。
✅ 正确做法:替换手写 HTML 分页代码
删除你当前手动编写的 分页结构,直接在 Blade 模板中插入:
{{ $users->links('pagination::bootstrap-5') }}
?
pagination::bootstrap-5是 Laravel 9+ 默认推荐的 Bootstrap 5 样式视图;若使用 Bootstrap 4,可改为pagination::bootstrap-4;如需自定义样式,也可发布分页视图:php artisan vendor:publish --tag=laravel-pagination
? 关键原理说明:
-
simplePaginate()不计算总页数,性能更优(适合大数据量),但仅提供「上一页 / 下一页」逻辑(无跳转到第 N 页); -
$users->links()会自动读取当前请求的?page=N参数,并为每一页生成正确的 URL(如/villas?page=2),Laravel 路由和模型查询会无缝配合完成数据切片; - 所有分页链接默认使用当前路由(包括命名路由、参数、查询参数),无需额外配置。
⚠️ 注意事项:
- 确保你的路由使用
GET方法(分页依赖查询参数); - 若使用
POST或表单提交后需保留分页,应改用withQueryString()(Laravel 9.19+)或手动拼接参数; - 在 API 场景中,建议改用
paginate()并返回 JSON,前端通过meta.last_page和links字段自行渲染; - 切勿对
$users数据做->toArray()后再传给links()——它必须是原始 Paginator 实例。
✅ 最终控制器保持简洁:
// app/Http/Controllers/VillaController.php
public function index()
{
$users = Villa::with('City', 'Seller', 'Payment')->simplePaginate(3);
return view('villas.index', compact('users'));
}
这样,点击「下一页」时浏览器将发起 GET /villas?page=2 请求,Laravel 自动复用相同查询逻辑并返回第 2 页的 3 条数据,整个流程完全自动化、零配置。











