Browse Source

减少无用的分页信息返回

waymen 7 months ago
parent
commit
9808ff7ee8

+ 18 - 0
app/Http/Resources/API/BaseResource.php

@@ -0,0 +1,18 @@
+<?php
+
+namespace App\Http\Resources\API;
+
+use App\Tools\ApiAnonymousResourceCollection;
+use Illuminate\Http\Resources\Json\JsonResource;
+
+class BaseResource extends JsonResource
+{
+    public static function collection($resource)
+    {
+        return tap(new ApiAnonymousResourceCollection($resource, static::class), function ($collection) {
+            if (property_exists(static::class, 'preserveKeys')) {
+                $collection->preserveKeys = (new static([]))->preserveKeys === true;
+            }
+        });
+    }
+}

+ 1 - 2
app/Http/Resources/API/SystemOperationLogResource.php

@@ -3,9 +3,8 @@
 namespace App\Http\Resources\API;
 
 use Illuminate\Http\Request;
-use Illuminate\Http\Resources\Json\JsonResource;
 
-class SystemOperationLogResource extends JsonResource
+class SystemOperationLogResource extends BaseResource
 {
     /**
      * Transform the resource into an array.

+ 2 - 1
app/Providers/AppServiceProvider.php

@@ -3,6 +3,7 @@
 namespace App\Providers;
 
 use App\Tools\ApiPaginator;
+use Illuminate\Pagination\LengthAwarePaginator;
 use Illuminate\Support\ServiceProvider;
 
 class AppServiceProvider extends ServiceProvider
@@ -21,7 +22,7 @@ class AppServiceProvider extends ServiceProvider
     public function boot(): void
     {
         //
-        $this->app->bind('Illuminate\Pagination\LengthAwarePaginator', function ($app, $options) {
+        $this->app->bind(LengthAwarePaginator::class, function ($app, $options) {
             return new ApiPaginator($options['items'], $options['total'], $options['perPage'], $options['currentPage'], $options['options']);
         });
     }

+ 23 - 0
app/Tools/ApiAnonymousResourceCollection.php

@@ -0,0 +1,23 @@
+<?php
+
+namespace App\Tools;
+
+use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
+
+class ApiAnonymousResourceCollection extends AnonymousResourceCollection
+{
+    public function paginationInformation($request, $paginated, $default): array
+    {
+        return [
+            'meta' => [
+                'current_page' => $paginated['current_page'],
+                'from' => $paginated['from'],
+                'last_page' => $paginated['last_page'],
+                'path' => $paginated['path'],
+                'per_page' => $paginated['per_page'],
+                'to' => $paginated['to'],
+                'total' => $paginated['total'],
+            ]
+        ];
+    }
+}