redsquirrelstudio / laravel-backpack-export-operation
一个操作,使用您熟悉和喜爱的Backpack API为您 CRUDs 实现可配置的导出
Requires
- backpack/crud: ^5.0|^6.0
- maatwebsite/excel: ^3.1
This package is auto-updated.
Last update: 2024-09-25 20:46:33 UTC
README
添加一个可配置的界面,允许您的管理员用户
- 将 CRUD 资源导出到多种文件格式。
- 决定他们想导出的列。
并允许您作为开发者
- 使用您熟悉和喜爱的Backpack API自定义每个 CRUD 的导出行为。
- 选择队列或即时导出。
- 完全自定义操作的行为。
如果您正在寻找一支优秀的开发团队来处理您的 Backpack/Laravel 开发,请给我们发邮件至 Sprechen
还需要为您的 CRUD 导入吗?请查看 redsquirrelstudio/laravel-backpack-import-operation
在后台驱动导出的是 maatwebsite/excel
目录
安装
环境要求
- PHP 扩展 php_zip
- PHP 扩展 php_xml
- PHP 扩展 php_gd2
- PHP 扩展 php_iconv
- PHP 扩展 php_simplexml
- PHP 扩展 php_xmlreader
- PHP 扩展 php_zlib
步骤 1.
使用 composer 需求此包
composer require redsquirrelstudio/laravel-backpack-export-operation
如果它尚未存在于您的项目中,此操作还将安装 maatwebsite/excel
步骤 2. (可选)
如果您想添加导出 PDF 的选项,也应安装 dompdf
composer require dompdf/dompdf
步骤 3. (可选)
服务提供程序位于: RedSquirrelStudio\LaravelBackpackExportOperation\Providers\ExportOperationProvider
将默认自动发现和注册。尽管如此,如果您像我一样,您也可以将其添加到您的 config/app.php
。
'providers' => ServiceProvider::defaultProviders()->merge([ /* * Package Service Providers... */ //Some other package's service providers... RedSquirrelStudio\LaravelBackpackExportOperation\Providers\ExportOperationProvider::class, ])->toArray(),
步骤 4.
发布配置文件
php artisan vendor:publish --tag=laravel-backpack-export-operation-config
这将创建一个新的文件 config/backpack/operations/export.php
,允许您自定义诸如导出文件应存储的磁盘和路径等设置。
步骤 5.
发布并运行迁移
php artisan vendor:publish --tag=laravel-backpack-export-operation-migrations
然后
php artisan migrate
用法
在您的 CRUD 控制器中,您需要导出操作。
稍等...
添加导出操作
class ExampleCrudController extends CrudController { use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation; use \RedSquirrelStudio\LaravelBackpackExportOperation\ExportOperation; //...
但是等等!还有更多!
配置导出
配置导出与配置列表操作的方式完全相同。只需定义您想导出的列即可,这里有一个例子
//Probably some more CRUD config... protected function setupExportOperation() { CRUD::addColumn([ 'name' => 'id', 'label' => 'ID', 'type' => 'number', ]); CRUD::addColumn([ 'name' => 'name', 'label' => 'Name', 'type' => 'text', ]); } //Fetch functions or something...
几乎所有适用于列表操作的可用的列在导出时都可以正常工作。这也意味着您可以用与列表列完全相同的方式定义自己的列。
有关可用列类型的列表,请参阅 Backpack for Laravel 的文档
禁用用户配置
有时,您可能不希望用户能够选择包含在他们的导出中的列。在这些情况下,您可以禁用用户配置步骤。
要启用此行为,请将以下一行代码添加到 setupExportOperation()
函数中
//... protected function setupExportOperation() { $this->disableUserConfiguration(); //...
队列导出
在大多数情况下,将导出操作放在后台处理,而不是让用户等待导出完成,对用户来说会更好。
因此,您可以选择将导出操作排队,方法是在 setupExportOperation()
函数中添加以下代码。
//... protected function setupExportOperation() { $this->queueExport(); //...
启用此选项后,您需要处理导出完成的情况,否则用户将不会收到导出文件。为此,您应该使用事件监听器处理 ExportCompleteEvent
。此事件包含导出日志,您可以从其中获取文件路径,通过电子邮件、通知等方式发送给用户。
当然,为了使此功能正常工作,您需要为应用程序设置一个队列以分发任务。要执行此操作,请遵循 Laravel 的官方文档。
启用此设置后,用户将被重定向到当前 CRUD 的列表视图。右上角将出现一个包含默认消息的警报。
如果您想更改此消息,请向 setupExportOperation()
函数添加以下行
//... protected function setupExportOperation() { $this->setQueueMessage("Your Message about the export being queued."); //...
配置
文件存储
默认情况下,导出文件将存储在默认磁盘的 /exports 路径下,但可以通过更改以下环境变量来更改此路径:
FILESYSTEM_DISK="s3" BACKPACK_EXPORT_FILE_PATH="/2024/application-name/exports"
或者直接更改 config/backpack/operations/export.php
中的选项。
//... //Filesystem disk to store export files 'disk' => "s3", //Path to store export files 'path' => "/2024/application-name/exports", //...
队列
您还可以通过更改以下环境变量来更改发送到排队导出的队列:
QUEUE_CONNECTION="export-queue"
或者直接在 config/backpack/operations/export.php
中更改值。
//... //Queue to dispatch export jobs to 'queue' => 'export-queue', //...
导出日志
在非常罕见的情况下,您可能还希望更改用于记录导出的模型,我无法想出一个理由,但肯定有人会找到一个。
如果您这样做,请确保更新迁移,并在 config/backpack/operations/export.php
中指定您自己的模型。
//... return [ 'export_log_model' => ExportLog::class, //...
翻译
如果需要,您可以更新操作翻译。为此,请运行以下命令
php artisan vendor:publish --tag=laravel-backpack-export-operation-translations
这将发布操作语言文件到 resources/lang/vendor/backpack/export-operation
。存储在此目录中的文件优先于包的默认语言文件。
视图
如果需要,您可以更新操作视图。为此,请运行以下命令
php artisan vendor:publish --tag=laravel-backpack-export-operation-views
这将发布操作 blade 文件到 resources/views/vendor/backpack/export-operation
。存储在此目录中的文件优先于包的默认视图。
导出完成事件
当导出完成时,此包会触发一个事件。事件负载包含导出日志,因此您可以发送带有文件下载链接的电子邮件、通知等。
事件类
RedSquirrelStudio\LaravelBackpackExportOperation\Events\ExportCompleteEvent::class
负载
[ //The Completed Export 'export_log' => RedSquirrelStudio\LaravelBackpackExportOperation\Models\ExportLog::class ]
限制访问
像 Backpack 中的大多数操作一样,您可以通过在 CRUD 控制器的设置函数中添加以下行来限制用户访问
public function setup() { //... CRUD::denyAccess('export'); //... }
致谢
- Lewis Raggett 和 Sprechen 团队 :: 包创建者
- Cristian Tabacitu :: Laravel Backpack 创建者
- Spartner :: Laravel Excel 创建者
- DomPDF :: DOMPDF 创建者
许可证
MIT。有关更多信息,请参阅许可证文件。