tecdynamics/datasynchronize

该包最新版本(dev-main)没有可用的许可信息。

在几个步骤中使站点准备就绪

dev-main 2024-06-30 10:13 UTC

This package is auto-updated.

Last update: 2024-09-30 10:37:20 UTC


README

使用方法

导出器

有两种方法可以创建导出器。

Exporter

使用命令创建导出器

您可以使用php artisan datasynchronize:make:exporter命令来创建导出器。

php artisan datasynchronize:make:exporter PostExporter

手动创建导出器

导出器应该看起来像这样,下面是PostExporter类的示例。

<?php

namespace Tec\Blog\Exporters;

use Tec\Blog\Models\Post;
use Tec\DataSynchronize\Exporter\ExportColumn;
use Tec\DataSynchronize\Exporter\Exporter;
use Illuminate\Support\Collection;

class PostExporter extends Exporter
{
    public function label(): string
    {
        return 'Posts';
    }

    public function columns(): array
    {
        return [
            ExportColumn::make('name'),
            ExportColumn::make('description'),
            ExportColumn::make('created_at'),
        ];
    }

    public function collection(): Collection
    {
        return Post::all();
    }
}

这是如何在控制器中使用导出器。

<?php

namespace Tec\Blog\Http\Controllers;

use Tec\DataSynchronize\Exporter\Exporter;
use Tec\DataSynchronize\Http\Controllers\ExportController;
use Tec\Blog\Exporters\PostExporter;

class ExportPostController extends ExportController
{
    protected function getExporter(): Exporter
    {
        return PostExporter::make();
    }
}

然后注册您的路由文件中的路由。

use Tec\Base\Facades\AdminHelper;
use Illuminate\Support\Facades\Route;
use Tec\Blog\Http\Controllers\ExportPostController;

AdminHelper::registerRoutes(function () {
    Route::prefix('tools/datasynchronize')->name('tools.datasynchronize.')->group(function () {
        Route::group(['prefix' => 'export/posts', 'as' => 'export.posts.', 'permission' => 'posts.export'], function () {
            Route::get('/', [ExportPostController::class, 'index'])->name('index');
            Route::post('/', [ExportPostController::class, 'store'])->name('store');
        });
    });
});

每个导出器路由都应该有一个访问权限。您可以在路由组中使用permission键来定义权限。

在上面的路由定义中,权限是posts.export键,其父权限是tools.datasynchronize。您可以在插件中的permissions.php中定义权限。

return [
    [
        'name' => 'Export Posts',
        'flag' => 'posts.export',
        'parent_flag' => 'tools.datasynchronize',
    ],
];

现在您可以通过http://your-domain/tools/datasynchronize/export/posts导航来导出帖子。

将导出器添加到导出/导入数据面板部分

Panel Section

要将导出器添加到导出/导入数据面板部分,您可以使用PanelSectionManager类的beforeRendering方法将导出器注册到面板部分。

use Tec\Base\Facades\PanelSectionManager;
use Tec\Base\PanelSections\PanelSectionItem;
use Tec\DataSynchronize\PanelSections\ExportPanelSection;

public function boot(): void
{
    // ...

    PanelSectionManager::setGroupId('datasynchronize')->beforeRendering(function () {
        PanelSectionManager::default()
            ->registerItem(
                ExportPanelSection::class,
                fn () => PanelSectionItem::make('posts')
                    ->setTitle('Posts')
                    ->withDescription('Export post data to CSV or Excel file.')
                    ->withPriority(120)
                    ->withRoute('tools.datasynchronize.export.posts.index')
                    ->withPermission('posts.export')
            );
    });
    
    // ...
}

您可以在导出/导入数据面板部分中看到导出器。

Panel Section