使用paginate物件如何自訂分頁碼?

laravel:8.9
php:8.1

情境:

DB::table('articles')->paginate(10);

我使用 paginate 物件得到的分頁預設是
localhost/blog/news?page=2
localhost/blog/news?page=3
…. 以此類推
.
要把?page=X 置換為 / X,例如
localhost/blog/news/2
localhost/blog/news/3
… 以此類推
.

我看了文件仍看不懂分页《Laravel 8 中文文档》
請教要如何做,謝謝。

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 6

paginate 方法可以传 4 个参数,最后一个参数就是页码

paginate($perPage = 15, $columns = ['*'], $pageName = 'page', $page = null)
3年前 评论

继承并重写分页方法,还想重写其他方法,自己点基类查找

<?php

namespace App\Repositories\Pagination;

use Illuminate\Pagination\LengthAwarePaginator;

/**
 * 自定义分页服务
 *
 * @author brad <brader.wen@gmail.com>
 * @date 2022-03-29
 */
class Paginator extends LengthAwarePaginator
{
    /**
     * Get the instance as an array.
     *
     * @return array
     */
    public function toArray()
    {
        return [
            'current_page' => $this->currentPage(),
            'last_page' => $this->lastPage(),
            'per_page' => $this->perPage(),
            'total' => $this->total(),
            'data' => $this->items->toArray(),
        ];
    }

}

App\Providers\AppServiceProvider 注册

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        // 自定义分页服务注册
        $this->app->bind(LengthAwarePaginator::class, Paginator::class);
    }
3年前 评论

有一个简单的办法,就是先获取 /* 的值,然后再给他设置到 request 里边。

$request->offsetSet('page', $page);
3年前 评论
chowjiawei

路由这样子接收参数 这里的 id 就等于是你的 page

file

控制器这样子拿到页数

file

$query->paginate($id); 这样子就可以了 这里的 id 是 page 的意思

3年前 评论
坐忘 3年前
chowjiawei (作者) 3年前