redsquirrelstudio/laravel-backpack-export-operation

一个操作,使用您熟悉和喜爱的Backpack API为您 CRUDs 实现可配置的导出

1.0.6 2024-04-25 19:33 UTC

README

Latest Version on Packagist

添加一个可配置的界面,允许您的管理员用户

  • 将 CRUD 资源导出到多种文件格式。
  • 决定他们想导出的列。

并允许您作为开发者

  • 使用您熟悉和喜爱的Backpack API自定义每个 CRUD 的导出行为。
  • 选择队列或即时导出。
  • 完全自定义操作的行为。

"Buy Me A Coffee"

如果您正在寻找一支优秀的开发团队来处理您的 Backpack/Laravel 开发,请给我们发邮件至 Sprechen

还需要为您的 CRUD 导入吗?请查看 redsquirrelstudio/laravel-backpack-import-operation

Screenshot of the operation's configuration screen

在后台驱动导出的是 maatwebsite/excel

目录

  1. 安装
  2. 用法
  3. 禁用用户配置
  4. 队列导出
  5. 配置
    1. 文件存储
    2. 队列
    3. 更改导出日志模型
    4. 自定义翻译
    5. 自定义视图
  6. 导出完成事件
  7. 限制访问
  8. 致谢
  9. 许可证

安装

环境要求

  • 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 官方文档中学习如何处理事件

当然,为了使此功能正常工作,您需要为应用程序设置一个队列以分发任务。要执行此操作,请遵循 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');
        //...
    }

致谢

许可证

MIT。有关更多信息,请参阅许可证文件