Browse Source

优化excel导出

moell 8 tháng trước cách đây
mục cha
commit
d294190762

+ 25 - 0
app/Exports/DownloadHelper.php

@@ -0,0 +1,25 @@
+<?php
+
+namespace App\Exports;
+
+use Maatwebsite\Excel\Facades\Excel;
+
+trait DownloadHelper
+{
+    protected function downloadExcelHelper($object, string $namePrefix, string $extension = null): \Symfony\Component\HttpFoundation\BinaryFileResponse
+    {
+        $extension = $extension ?: "xlsx";
+
+        throw_validation_if(! in_array($extension, ['xlsx', 'xls', 'csv']), "Support xlsx, xls, csv formats");
+
+        return Excel::download(
+            $object,
+            sprintf("%s-%s.%s", $namePrefix, date("YmdHis"), $extension),
+            match ($extension) {
+                'csv' => \Maatwebsite\Excel\Excel::CSV,
+                'xlsx' => \Maatwebsite\Excel\Excel::XLSX,
+                'xls' => \Maatwebsite\Excel\Excel::XLS,
+            },
+        );
+    }
+}

+ 6 - 13
app/Http/Controllers/API/RequirementController.php

@@ -2,6 +2,7 @@
 
 namespace App\Http\Controllers\API;
 
+use App\Exports\DownloadHelper;
 use App\Exports\RequirementExport;
 use App\Http\Controllers\Controller;
 use App\Http\Requests\API\Requirement\ClosedRequest;
@@ -23,11 +24,11 @@ use App\Services\History\ModelChangeDetector;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
-use Illuminate\Validation\Rules\Enum;
-use Maatwebsite\Excel\Facades\Excel;
 
 class RequirementController extends Controller
 {
+    use DownloadHelper;
+
     /**
      * Display a listing of the resource.
      */
@@ -51,18 +52,10 @@ class RequirementController extends Controller
 
     public function export(Request $request)
     {
-        $extension = $request->get("extension", "xlsx");
-
-        throw_validation_if(! in_array($extension, ['xlsx', 'xls', 'csv']), "Support xlsx, xls, csv formats");
-
-        return Excel::download(
+        return $this->downloadExcelHelper(
             new RequirementExport(),
-            sprintf("requirement-%s.%s", date("YmdHis"), $extension),
-            match ($extension) {
-              'csv' => \Maatwebsite\Excel\Excel::CSV,
-              'xlsx' => \Maatwebsite\Excel\Excel::XLSX,
-              'xls' => \Maatwebsite\Excel\Excel::XLS,
-            },
+            "requirement",
+            $request->get("extension"),
         );
     }