优雅/laravel-workflow

v1.0.6 2024-09-22 12:44 UTC

This package is auto-updated.

Last update: 2024-09-22 12:44:38 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

安装

您可以通过 composer 安装此包

composer require elegantly/laravel-workflow

您可以使用以下命令发布和运行迁移

php artisan vendor:publish --tag="workflow-migrations"
php artisan migrate

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="workflow-config"

这是已发布配置文件的内容

return [

    'queue' => env('WORKFLOW_QUEUE'),

    'queue_connection' => env('WORKFLOW_QUEUE_CONNECTION'),

];

使用方法

定义您的流程

在类似以下类的文件中定义一个流程

namespace App\Workflows;

use Carbon\CarbonInterval;
use Elegantly\Workflow\Models\Workflow;
use Elegantly\Workflow\WorkflowDefinition;
use Elegantly\Workflow\WorkflowStep;
use Illuminate\Support\Collection;

class WelcomeUserWorkflow extends WorkflowDefinition
{
    public function __construct(
        public User $user
    ) {
        //
    }

    public function steps(Workflow $workflow): Collection
    {
        return collect()
            ->put(
                'welcome-email',
                WorkflowStep::make($workflow)
                    ->action(function (): void {
                        // send an email to the user
                    })
            )
            ->put(
                'export-user',
                WorkflowStep::make($workflow)
                    ->action(new ExportUserToCrmJob($this->user))
            )
            ->put(
                'product-tour-email',
                WorkflowStep::make($workflow)
                    ->after([
                        'welcome-email' => CarbonInterval::days(3)
                    ])
                    ->action(function (): void {
                        // Send another email to your user
                    })
            )
            ->put(
                'send-promo-code',
                WorkflowStep::make($workflow)
                    ->after([
                        'product-tour-email' => CarbonInterval::days(7),
                    ])
                    ->when(fn() => $this->user->hasNotPurchased())
                    ->action(function (): void {
                        //
                    })
            );
    }
}

运行您的流程

use Elegantly\Workflow\Commands\RunWorkflowsCommand;

$schedule->command(RunWorkflowsCommand::class)->everyMinutes();

测试

composer test

变更日志

请参阅 CHANGELOG 了解最近更改的详细信息。

贡献

请参阅 CONTRIBUTING 了解详细信息。

安全漏洞

请查看 我们的安全策略 了解如何报告安全漏洞。

致谢

许可证

MIT 许可证 (MIT)。请参阅 许可证文件 了解更多信息。