用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容器内重新绑定了这个分页类的实现 测试一下 完美解决
主要还是用到了类的重写和容器, 没啥特别复杂的操作