audunru/export-response
最新稳定版本:v5.0.1
Composer 安装命令:
composer require audunru/export-response
包简介
Export Laravel JSON to responses to other formats, e.g. CSV
README 文档
README
Currently supported:
- CSV
- XLSX
- XML
Installation
Step 1: Install with Composer
composer require audunru/export-response
Depending on which formats you want to export to, you will have to install additional packages:
| Format | Package |
|---|---|
| CSV | spatie/simple-excel |
| XLSX | spatie/simple-excel |
| XML | spatie/array-to-xml |
Step 2: Add middleware to your routes
To allow exports for all your API endpoints, add middleware to Kernel.php:
'api' => [ 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, \audunru\ExportResponse\Middleware\ExportCsv::class, \audunru\ExportResponse\Middleware\ExportXlsx::class, \audunru\ExportResponse\Middleware\ExportXml::class, ],
To add it to one particular API resource, you can use this in api.php:
Route::apiResource('documents', DocumentController::class) ->middleware([ ExportCsv::class, ExportXlsx::class, ExportXml::class ]) ->name('documents');
You can specify an array key which will be used to retrieve the data. "Dot" notation is supported.
Route::apiResource('documents', DocumentController::class) ->middleware([ ExportCsv::with([ 'key' => 'data', ]), ExportXlsx::with([ 'key' => 'data', ]), ExportXml::class::with([ 'key' => 'data', ]), ]) ->name('documents');
You can also add the middleware to the $middlewareGroups and $routeMiddleware arrays in app/Http/Kernel.php:
protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], 'api' => [ 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, // Add ExportCsv middleware to all requests. "data" is the name of // the key to retrieve using "dot" notation. 'csv:data', ], ]; protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 'csv' => \audunru\ExportResponse\Middleware\ExportCsv::class, ];
Exporting from controller
Instead of using middleware, you can perform the export in the controller:
class ProductController extends Controller { public function csv() { $products = Product::all(); return $products->toCsv('filename.csv'); }
Lazy collections are also supported:
class ProductController extends Controller { public function csv() { $products = Product::lazy(); return $products->toCsv('filename.csv'); }
Please use lazy collections when you can. During testing, using Product::lazy() to export 10,000 products took about 2MB of memory, compared to 44 MB of memory using Product::all(). Both exports took the same amount of time (around 45 seconds).
Step 3: Exporting a response
In order to retrieve an API response as CSV instead of JSON, send a request to your API with the Accept header set to text/csv.
For XML, set the header to application/xml.
For XLSX, set the header to application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.
Configuration
Publish the configuration file by running:
php artisan vendor:publish --tag=export-response-config
Development
Testing
Run tests:
composer test
统计信息
- 总下载量: 4.66k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 2
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2021-09-17