laravel自定义分页数据格式

   日期:2020-07-02     浏览:96    评论:0    
核心提示:背景用laravel好几年了, 这次写接口的时候, 突然发现分页数据返回的格式有点杂,而且作为一个api不需要返回这么多用不着的数据, 于是就想着看看能不能改下{ code: 200, data: { current_page: 1, data: [ { id: 1, name: 技术部, descripti

背景

laravel好几年了, 这次写接口的时候, 突然发现分页数据返回的格式有点杂,而且作为一个api不需要返回这么多用不着的数据, 于是就想着看看能不能改下

{
    "code": 200,
    "data": {
        "current_page": 1,
        "data": [
            {
                "id": 1,
                "name": "技术部",
                "description": "",
                "qr_code_path": "http://mag.com/1.jpg",
                "created_at": "2020-06-24 16:12:43",
                "updated_at": "2020-06-24 16:12:44"
            }
        ],
        "first_page_url": "http://mag.com/department?page=1",
        "from": 1,
        "last_page": 1,
        "last_page_url": "http://mag.com/department?page=1",
        "next_page_url": null,
        "path": "http://mag.com/department",
        "per_page": 10,
        "prev_page_url": null,
        "to": 1,
        "total": 1
    },
    "message": "success"
}

解决

寻找发现
Illuminate\Database\Eloquent\Builder 文件

调用组装分页数据的地方

随即再跟进Illuminate\Database\Concerns\BuildsQueries


可以看到我用红色标出来是是返回的分页类, 用蓝色标出来是用容器加载的这个类

继续查找这个类Illuminate\Pagination\LengthAwarePaginator
发现组装分页数据的是这个类中toArray方法

刚刚上面也说这个分页类是通过容器加载的,那我们只要在容器内重新加载下这个类就行

于是我先自定义了一个分页类,继承了上面的分页类,并重写了toArray方法

然后在AppServiceProvider容器内重新绑定了这个分页类的实现
测试一下

完美解决

总结

主要还是用到了类的重写和容器, 没啥特别复杂的操作

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服