php-utils/laravel-workflow

laravel 5.6, 5.7 的简单工作流

该包的官方仓库似乎已删除,因此该包已被冻结。

v2.1.1 2018-12-18 09:04 UTC

This package is auto-updated.

Last update: 2021-12-18 16:03:17 UTC


README

支持 5.6 , 5.7

安装

composer require php-utils/laravel-workflow

将以下内容添加到 config/app.php

  'providers' => [
    ...
    Workflow\Providers\WorkflowServiceProvider::class,
  ],
  
  'aliases' => [
    ...
    'Workflow' => Workflow\Facades\Workflow::class,
  ]

运行

    php artisan vendor:publish
    
    Select: Provider: Workflow\Providers\WorkflowServiceProvider

使用方法

  1. 根据示例创建您的主题配置
  2. 您的主题应该实现 Workflow\Contracts\Subject
  3. 为每个转换创建命令,它应实现 Workflow\Contracts\Command 或扩展 Workflow\Commands\Command。如果您想延迟处理耗时的命令,应从 Workflow\Commands\QueuedCommand 扩展。
  4. 如果您不需要按角色分离转换,可以跳过实现 Workflow\Contracts\Who
  5. 如果您不需要将上下文传递给命令,可以跳过实现 Workflow\Contracts\Context

示例

安装后,您可以在 config/workflow.php 中查看示例。

完整示例: https://github.com/vadim-ostapenko/workflow/blob/master/README.md

配置示例

 'lesson' => [
        'states' => [
            'started',
            'paused',
            'finished'
        ],
        'transitions' => [
            [
                'name' => 'pause',
                'routes' => [
                    [
                        'from' => 'started',
                        'to' => 'paused',
                        'who' => ['student']
                    ]
                ]
            ],
            [
                'name' => 'finish',
                'routes' => [
                    [
                        'from' => 'started',
                        'to' => 'finished',
                        'who' => ['teacher']
                    ],
                    [
                        'from' => 'paused',
                        'to' => 'finished',
                        'who' => []
                    ]
                ]
            ]
        ]
    ]
$lesson     = new \WorkflowExample\Subject\Lesson();
$student    = new \WorkflowExample\Who\Student();
$teacher    = new \WorkflowExample\Who\Teacher();
$workflow   = new \Workflow\BusWorkflow($lesson, \Workflow\Facades\Workflow::get('lesson'));

$workflow->can('answer', $teacher);     //false
$workflow->make('pause', $student);     //pause
$workflow->make('finish', $student);    //finish