thomascombe/backpack-async-export

这是一个用于管理Laravel Backpack中异步导出功能的包

4.0.0 2024-07-16 12:54 UTC

README

Social Card of Laravel Backpack Async Export

Laravel Backpack 异步导出

Latest Version on Packagist PHPCS check Total Downloads

这是一个用于管理Laravel Backpack中的异步导出和导入的包

Demo of Laravel Backpack Async Export

Demo of Laravel Backpack Async Export

安装

您可以通过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';
    }
}

Demo with custom name of Laravel Backpack Async Export

通过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)。请参阅许可证文件获取更多信息。