thomascombe / backpack-async-export
这是一个用于管理Laravel Backpack中异步导出功能的包
Requires
- php: ^8.2
- backpack/crud: ~6.0
- illuminate/contracts: ^11.0
- maatwebsite/excel: ^3.1
- spatie/laravel-package-tools: ^1.12
Requires (Dev)
- laravel/scout: ^10.10
- nunomaduro/collision: ^8.1
- nunomaduro/larastan: ^2.0
- orchestra/testbench: ^9.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.1
- spatie/laravel-ray: ^1.30
- squizlabs/php_codesniffer: ^3.7
- vimeo/psalm: ^5.0
This package is auto-updated.
Last update: 2024-09-16 13:17:46 UTC
README
Laravel Backpack 异步导出
这是一个用于管理Laravel Backpack中的异步导出和导入的包
安装
您可以通过Composer安装此包
composer require thomascombe/backpack-async-export
您可以使用以下命令发布和运行迁移
php artisan vendor:publish --provider="Thomascombe\BackpackAsyncExport\BackpackAsyncExportServiceProvider" --tag="backpack-async-export-migrations" php artisan migrate
您可以使用以下命令发布配置文件
php artisan vendor:publish --provider="Thomascombe\BackpackAsyncExport\BackpackAsyncExportServiceProvider" --tag="backpack-async-export-config"
这是已发布配置文件的内容
return [ 'feature_enabled' => [ 'export' => true, 'import' => true, ], 'user_model' => 'App\Models\User', 'import_export_model' => Thomascombe\BackpackAsyncExport\Models\ImportExport::class, 'admin_export_route' => 'export', 'admin_import_route' => 'import', 'export_memory_limit' => '2048M', 'disk' => 'local', ];
导出用法
在菜单中添加导出项
php artisan backpack:add-sidebar-content "<li class='nav-item'><a class='nav-link' href='{{ backpack_url('export') }}'><i class='nav-icon la la-file-export'></i> <span>Export</span></a></li>" # or php artisan backpack:add-menu-content "<x-backpack::menu-item title='Export' icon='la la-file-export' :link=\"backpack_url('export')\" />"
创建您的导出类
php artisan make:export UserExport --model=App/Models/User
有关所有详细信息,请参阅 Laravel Excel 包。
您可以让您的导出类扩展我们的 LaravelExcel 抽象类。
创建您的控制器
php artisan backpack:crud {ModelName}
您的控制器需要实现接口
use Thomascombe\BackpackAsyncExport\Http\Controllers\Admin\Interfaces\ExportableCrud; class {Name}CrudController extends CrudController implements ExportableCrud {}
使用优秀的特性
use \Thomascombe\BackpackAsyncExport\Http\Controllers\Admin\Traits\HasExportButton;
调用方法添加按钮
public function setup() { // ... $this->addExportButtons(); }
在您的CRUD控制器中添加方法
use Thomascombe\BackpackAsyncExport\Enums\ActionType; use Thomascombe\BackpackAsyncExport\Enums\ImportExportStatus; use Thomascombe\BackpackAsyncExport\Models\ImportExport; public function getExport(): ImportExport { return ImportExport::create([ ImportExport::COLUMN_USER_ID => backpack_user()->id, ImportExport::COLUMN_ACTION_TYPE => ActionType::Export, ImportExport::COLUMN_STATUS => ImportExportStatus::Created, ImportExport::COLUMN_FILENAME => sprintf('export/users_%s.xlsx', now()->toIso8601String()), ImportExport::COLUMN_EXPORT_TYPE => UserExport::class, ]); } public function getExportParameters(): array { return []; }
简单的CSV导出
有时可能需要导出大量数据。PhpSpreadsheet(此包底层使用)并不总是提供最佳性能。在这种情况下,建议使用PHP的低级函数,例如 fputcsv。
此包有一个抽象类 SimpleCsv,可以扩展以使用此导出模式。当然,它的功能更为有限,只能让您定义查询、标题以及模型和数据表之间的映射。
use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Thomascombe\BackpackAsyncExport\Exports\SimpleCsv; class UserExport extends SimpleCsv { public function query(): EloquentBuilder { return User::query(); } public function headings(): array { return [ 'ID', 'Name', 'Email', ]; } /** * @param User $user * @return array */ public function map($user): array { return [ $user->id, $user->name, $user->email, ]; } }
导入用法
在菜单中添加导入项
php artisan backpack:add-sidebar-content "<li class='nav-item'><a class='nav-link' href='{{ backpack_url('import') }}'><i class='nav-icon la la-file-import'></i> <span>Import</span></a></li>"
创建您的导入类
php artisan make:import UserImport --model=App/Models/User
有关所有详细信息,请参阅 Laravel Excel 包
创建您的控制器
php artisan backpack:crud {Name}CrudController
您的控制器需要实现接口
use Thomascombe\BackpackAsyncExport\Http\Controllers\Admin\Interfaces\ImportableCrud; class {Name}CrudController extends CrudController implements ImportableCrud {}
使用优秀的特性
use Thomascombe\BackpackAsyncExport\Http\Controllers\Admin\Traits\HasImportButton;
调用方法添加按钮
public function setup() { // ... $this->addImportButtons(); }
在您的CRUD控制器中添加方法
use Thomascombe\BackpackAsyncExport\Enums\ActionType; use Thomascombe\BackpackAsyncExport\Enums\ImportExportStatus; use Thomascombe\BackpackAsyncExport\Models\ImportExport; public function getImport(): ImportExport { return ImportExport::create([ ImportExport::COLUMN_USER_ID => backpack_user()->id, ImportExport::COLUMN_ACTION_TYPE => ActionType::Import->value, ImportExport::COLUMN_STATUS => ImportExportStatus::Created, ImportExport::COLUMN_FILENAME => '', ImportExport::COLUMN_EXPORT_TYPE => UserImport::class, ]); } public function getImportParameters(): array { return [ 'private' => [ 'hint' => 'CSV file required', 'mimetypes' => ['text/csv', 'application/csv'], ], ]; }
需要更多功能?
重写 ImportExport 模型
您可以使用配置 import_export_model
重写 ImportExport
模型。
您的模型类 必须 实现 \Thomascombe\BackpackAsyncExport\Models\ImportExport
。
class ImportExport extends \Thomascombe\BackpackAsyncExport\Models\ImportExport { }
更新导出名称
包允许通过导出类上的接口更改导出名称:Thomascombe\BackpackAsyncExport\Exports\ExportWithName
namespace App\Exports; use Thomascombe\BackpackAsyncExport\Exports\ExportWithName; class UserExport implements ExportWithName { public static function getName(): string { return 'My export name'; } }
通过CRUD进行多导出?
您可以在保存CRUD时轻松地进行多导出。
您的CRUD控制器需要实现 Thomascombe\BackpackAsyncExport\Http\Controllers\Admin\Interfaces\MultiExportableCrud
接口。
public function getAvailableExports(): array { return [ 'default' => null, 'all' => 'All', ]; }
数组键:查询参数的键和动态方法名称
数组值:导出名称(显示在CRUD按钮中)
对于每个新的导出,您都必须添加新方法
public function getExport*All*(): ImportExport { return ImportExport::create(...); } public function getExport*All*Parameters(): array { return [...]; }
测试
composer test
变更日志
请参阅 CHANGELOG 以获取有关最近更改的更多信息。
贡献
请参阅 CONTRIBUTING 以获取详细信息。
安全漏洞
请查阅我们的安全策略了解如何报告安全漏洞。
鸣谢
许可证
MIT许可证(MIT)。请参阅许可证文件获取更多信息。