mehrdadmahdian/php-workflow-core

一个用于简单业务流程的简单PHP引擎

dev-master 2021-10-02 06:20 UTC

This package is auto-updated.

Last update: 2024-09-29 06:20:19 UTC


README

(开发中 - 请勿使用)

这是一个与简单业务流程交互的出色工作流引擎。

该核心使用简单的活动数组配置来构建业务工作流程模型。代码客户端可以在构建的过程模型上运行不同的操作并更新模型状态。

流程主要概念

alt Simple Process Example

假设每个流程由多个活动块组成,这些活动块通过转换流相互连接。

  • 每个活动都有自己的唯一名称。这是到达活动元素的关键。
  • 每个活动可以连接到多个来源。来源必须是活动类型。
    • 一个活动可以没有来源。这意味着在开始操作时,此活动的状态将更新为 active 状态
  • 每个活动可以连接到多个目标。目标必须是活动类型。
    • 一个活动可以没有目标。这意味着流程处于最后的活动状态。
  • 每个活动都有其当前状态。状态可能介于以下状态之一:activeinactivedone
  • 在流程开始时,所有活动都具有 inactive 状态。
  • 当活动目标被触发时,目标活动将进入 active 状态。
  • 每个流程一次只能有一个 active 活动。
  • 每个活动都可以有自己的观察者。在更新活动状态时,观察者将被通知。
  • 此引擎不支持条件或并行流。

安装

只需运行 composer require 命令即可将此库包含到您的项目中

    composer require mehrdadmahdian/php-workflow-core

要访问库功能,应使用此命名空间: MehrdadMahdian\PhpWorkflowCore

用法

这里介绍了一个流程配置数组的示例。这是一个包含3个活动但尚未启动的流程,所有活动都具有null或inactive状态。 alt Simple Process Example 代码客户端决定在哪里加载配置。它可以从永久存储中加载,也可以从文件中静态加载。

    $configuration = [
       'activities' => [
           [
               'name' => 'act1',
               'sources' => [],
               'targets' => ['act2'],
//               'status'  => ElementInterface::STATUS_INACTIVE,
               'observers' => [ActivitySampleObserver::class],
               'extra-actions' => [
                    SomeActionTypeWhichImplementsActionInterface1::class,
                    SomeActionTypeWhichImplementsActionInterface2::class
                ]           
           ],
           [
               'name' => 'act2',
               'sources' => ['act1'],
               'targets' => ['act3'],
//               'status'  => ElementInterface::STATUS_INACTIVE
           ],
           [
               'name' => 'act3',
               'sources' => ['act2'],
               'targets' => [],
               'status'  => ElementInterface::STATUS_INACTIVE
           ],
       ]
    ];

可以使用内置的封装方法构建流程模型。

    use MehrdadMahdian\PhpWorkflowCore\PhpWorkflowCoreFacade;
    $model = PhpWorkflowCoreFacade::buildProcessModel($configuration);

操作

客户端可以使用内置封装运行引擎操作

    use MehrdadMahdian\PhpWorkflowCore\PhpWorkflowCoreFacade;
    $model = PhpWorkflowCoreFacade::runEngineAction($model, $action, $params);

每个操作类型之后,都可以访问更新后的模型。如果需要,客户端必须持久化更新后的模型数据。

要查找每个活动有哪些操作,我们可以使用以下代码

    use MehrdadMahdian\PhpWorkflowCore\PhpWorkflowCoreFacade;
    $model = PhpWorkflowCoreFacade::getActivityActions($model, $myActivityKey);

它将返回可用的操作列表及其所需参数。

此库支持两种内置操作,每个操作都有自己的参数。

启动操作

此类操作不需要参数

    use MehrdadMahdian\PhpWorkflowCore\PhpWorkflowCoreFacade;
    $model = PhpWorkflowCoreFacade::runEngineAction(
        $model, //suppose that model is defined previously in the code. mdoel is in type of ModelInterface 
        'start'
    );

转换操作

    use MehrdadMahdian\PhpWorkflowCore\PhpWorkflowCoreFacade;
    $model = PhpWorkflowCoreFacade::runEngineAction(
        $model,
        'transition',
        ['currentActivityKey' => 'act1', 'targetActivityKey' => 'act2']
     );

其他操作

在工作流核心的内置操作中,我们可以运行实现 ActionInterface 的所需操作。为此,必须将操作类输入到 runEngineAction,如下所示

    use MehrdadMahdian\PhpWorkflowCore\PhpWorkflowCoreFacade;
    $parameters = [
        //key: //value,
        //key2: //value2,
        ...
    ];         
    $model = PhpWorkflowCoreFacade::runEngineAction(
        $model,
        \Path\To\My\Custom\Action::class,
        $parameters
     );

观察者

暂无描述。

贡献

如果您想为此项目做出贡献,请遵循以下说明。

  1. 分支项目
  2. 创建您的功能分支(git checkout -b feature/AmazingFeature
  3. 提交您的更改(git commit -m 'Add some AmazingFeature'
  4. 推送到分支(git push origin feature/AmazingFeature
  5. 在此存储库上打开PR
  6. 等待接受和合并PR

许可证

在MIT许可证下分发。

联系

梅哈德·马赫迪安:Gmail

项目链接:PHP Workflow 核心库

待办事项

  • 缺少测试
  • 从活动获取可用的操作
  • 支持发布的配置文件。
  • 配置验证器
  • 操作验证器实现

建议贡献的功能

  • 用于 Laravel 和其他 PHP 框架的包装器