背景
用laravel
好几年了, 这次写接口的时候, 突然发现分页数据返回的格式有点杂,而且作为一个api
不需要返回这么多用不着的数据, 于是就想着看看能不能改下
1 | { |
解决
寻找发现Illuminate\Database\Eloquent\Builder
文件
调用组装分页数据的地方
随即再跟进Illuminate\Database\Concerns\BuildsQueries
可以看到我用红色标出来是是返回的分页类, 用蓝色标出来是用容器加载的这个类
继续查找这个类Illuminate\Pagination\LengthAwarePaginator
发现组装分页数据的是这个类中toArray
方法
刚刚上面也说这个分页类是通过容器加载的,那我们只要在容器内重新加载下这个类就行
于是我先自定义了一个分页类,继承了上面的分页类,并重写了toArray
方法
然后在AppServiceProvider
容器内重新绑定了这个分页类的实现
测试一下
完美解决
总结
主要还是用到了类的重写和容器, 没啥特别复杂的操作