自定义分页格式

1. 需求

为啥要自定义分页数据格式?

  1. laravel自带的分页信息对于api来说显得臃肿
  2. 在对接小程序的时候不需要那么多的信息
  3. 本着简化分页数据结构的目的来自定义分页格式
  4. 最重要:抛砖引玉,合理的利用容器,用起laravel更得心应手。

2. 目标

自定义的分页格式

{
    "page": 1,
    "list": [
        {
            // Result Object
        }
    ],
    "total": 11,
}

laravel自带的分页格式

{
   "total": 50,
   "per_page": 15,
   "current_page": 1,
   "last_page": 4,
   "first_page_url": "http://laravel.app?page=1",
   "last_page_url": "http://laravel.app?page=4",
   "next_page_url": "http://laravel.app?page=2",
   "prev_page_url": null,
   "path": "http://laravel.app",
   "from": 1,
   "to": 15,
   "data":[
        {
            // Result Object
        },
        {
            // Result Object
        }
   ]
}

3. 具体细节与代码

在bootstrap/app.php文件或者appProvider中加入以下代码


//重新绑定到容器分页类的实现者
$app->bind('Illuminate\Pagination\LengthAwarePaginator', function ($app, $options) {
    return (new \App\Tool\Paginator($options['items'], $options['total'], $options['perPage'], $options['currentPage'], $options['options']));
});

实现\App\Tool\Paginator

<?php

namespace App\Tool;

use Illuminate\Pagination\LengthAwarePaginator;


class Paginator extends LengthAwarePaginator
{

    public function toArray()
    {
        return [
            'page'  => $this->currentPage(),
            'list'  => $this->items->toArray(),
            'total' => $this->total(),
        ];
    }
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 8

优秀!

4年前 评论
嘴里起了个泡 (楼主) 4年前

感谢,刚好遇到这问题

3年前 评论
嘴里起了个泡 (楼主) 3年前

非常感谢 正好遇到这个问题 :kissing_heart:

3年前 评论

留个脚印,做备注

1年前 评论

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