使用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 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 6

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

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

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

<?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);
    }
2年前 评论

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

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

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

file

控制器这样子拿到页数

file

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

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

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!