dandysi / laravel-batch-upload
一个用于管理/自动化/处理数据上传(如CSV)的框架,使用您的业务逻辑
v1.0.1
2024-02-05 19:19 UTC
Requires
- php: ^8.1
- illuminate/console: ^10.37
- illuminate/support: ^10.37
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.42
- orchestra/testbench: ^8.18
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.5
This package is auto-updated.
Last update: 2024-09-05 20:32:38 UTC
README
一个用于帮助管理/自动化/处理数据上传(如CSV)的框架,使用您的业务逻辑。它具有成为不仅仅是数据库更新工具的潜力。
- 调度 - 定义您希望上传何时被处理
- 验证 - 添加规则以确保数据在处理前有效,并在失败时提供反馈
- 可配置 - 全局或按处理器粒度
- 无头 - 创建前端和审批流程以适应您的具体需求
安装
composer require dandysi/laravel-batch-upload
配置
php artisan vendor:publish --provider="Dandysi\Laravel\BatchUpload\BatchUploadServiceProvider"
通过更改 config/batch-upload.php
中的值来配置此包。
入门
第一步是创建一个处理器(处理行数据的一个引擎)。它是一个简单的PHP类,可以使用以下maker命令创建:
php artisan make:batch-upload-processor CreateCategoriesProcessor create_categories
将处理器添加到 config/batch-upload.php
配置文件中。
/** * Register processors here */ 'processors' => [ App\BatchUploads\CreateCategoriesProcessor::class ],
定义列/验证规则并实现处理上传行数据的代码。
class CreateCategoriesProcessor implements ProcessorInterface { public function config(): ProcessorConfig { return ProcessorConfig::create() ->column('code', 'Code', 'required') ->column('name', 'Name', 'required') ; } public function __invoke(array $row): void { $category = Cagegory::create([ 'code' => $row['code'], 'name' => $row['name] ]); //more than just a simple data upload as you can add any other business logic here }
创建批次
通常这不会是一步完成,但以下概述了所有必需的阶段。
use Dandysi\Laravel\BatchUpload\Services\BatchService; //Step 1 - Create $service = app(BatchService::class); $options = $service->options('create_categories', '/data/categories.csv'); $batch = $service->create($options); //Step 2 - Approve $batch->status = Batch::STATUS_APPROVE; $batch->save(); //Step 3 - Dispatch (each row will be a seperate queued job) $service->dispatch($batch);
如果发生验证错误,它们将记录在每一行上,批次/行的状态将反映这一点。
计划中的批次
使用附加选项计划批次,而无需执行上述第3步。
$options = $service ->options('create_categories', '/data/categories.csv') ->schedule(now()->tommorow()) ;
为确保计划中的批次被调度,您需要向控制台内核添加一个调度命令
class Kernel extends ConsoleKernel { /** * Define the application's command schedule. */ protected function schedule(Schedule $schedule): void { $schedule->command('batch-upload:dispatch')->everyTenMinutes(); }
或创建自己的cron条目以执行以下操作
php artisan batch-upload:dispatch
用户批次
如果您的批次需要通过用户来识别,可以在创建步骤中添加另一个选项
$options = $service ->options('create_categories', '/data/categories.csv') ->user('user123') ;
控制台命令
立即创建和调度一个批次
php artisan batch-upload:create create_categories /data/categories.csv --force-dispatch
延迟分钟
--delay=60
或用用户标识--user=user123
。延迟将需要上述调度命令/cron步骤。
许可证
开源软件,许可协议为MIT许可证。