自定義分頁格式

1711293058發表於2020-03-21

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 協議》,轉載必須註明作者和本文連結

相關文章