nova-kit/nova-queued-export-as-csv

Laravel Nova的队列导出为CSV动作

v1.4.0 2024-03-07 11:26 UTC

This package is auto-updated.

Last update: 2024-09-14 10:59:57 UTC


README

tests Latest Stable Version Total Downloads Latest Unstable Version License

安装

要通过composer安装,请在终端运行以下命令

composer require "nova-kit/nova-queued-export-as-csv"

用法

您可以将Laravel\Nova\Actions\ExportAsCsv替换为NovaKit\NovaQueuedExportAsCsv\Actions\QueuedExportAsCsv

use Laravel\Nova\Actions\ExportAsCsv;
use NovaKit\NovaQueuedExportAsCsv\Actions\QueuedExportAsCsv;

/**
 * Get the actions available for the resource.
 *
 * @param  \Laravel\Nova\Http\Requests\NovaRequest  $request
 * @return array
 */
public function actions(NovaRequest $request)
{
    return [
        QueuedExportAsCsv::make(),
    ];
}

如果您想更改存储磁盘以保存可供下载的CSV文件,可以在注册动作时调用withStorageDisk()方法

return [
    QueuedExportAsCsv::make()->withStorageDisk('s3'),
];

您还可以使用以下代码自定义响应消息

use Laravel\Nova\Actions\Action;
use NovaKit\NovaQueuedExportAsCsv\Actions\QueuedExportAsCsv;

return [
    QueuedExportAsCsv::make()->then(function () {
        return response()->json(Action::message('Action has been queued!'));
    }),
];

为了处理存储的CSV,您需要监听NovaKit\NovaQueuedExportAsCsv\Events\QueuedCsvExported事件,例如,您可以使用以下监听器类向Nova的通知广播

<?php

namespace App\Listeners;

use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Storage;
use Laravel\Nova\Notifications\NovaNotification;
use Laravel\Nova\URL;
use NovaKit\NovaQueuedExportAsCsv\Events\QueuedCsvExported;

class NotifyCsvExported
{
    /**
     * Handle the event.
     *
     * @param  \NovaKit\NovaQueuedExportAsCsv\Events\QueuedCsvExported  $event
     * @return void
     */
    public function handle(QueuedCsvExported $event)
    {
        $event->user->notify(
            NovaNotification::make()
                ->message('Your CSV is ready to download.')
                ->action('Download', URL::remote(Storage::disk($event->storageDisk)->url($event->filename)))
                ->icon('download')
                ->type('info')
        );
    }
}