jeyroik/extas-workflow

关于此包的最新版本(5.1.1)没有提供许可信息。

Extas 工作流包


README

tests codecov.io PHPStan Enabled Extas Installer v3 Latest Stable Version Total Downloads Dependents

Описание

该包提供了一个机制来组织将实体从一个状态转换到另一个状态。

更详细的信息可以在 wiki 中找到。

还实现了用于管理 workflow 的仪表板和用于一起启动所有这些的 docker-compose

包安装

# composer require jeyroik/extas-workflow:*

测试

# composer run-script test

术语

在包中使用了以下内容

  • 实体 IEntity - 需要从一种状态转换到另一种状态的对象。
  • 状态 IState - 实体的状态,具有描述和名称。
  • 转换 ITransition - 描述实体从一种状态转换到另一种状态的可能的对象。
    • 除了从特定状态转换外,还允许从任何状态(*)转换。
  • 模式 ISchema - 描述实体所有可用转换的对象。
  • 转换处理程序 ITransitionDispatcher - 在特定模式中针对特定转换启动的处理程序。
    • 目前,这些处理程序用于实现条件、验证器和触发器。
    • 条件 - 转换前的检查。
    • 验证器 - 转换期间的检查。
    • 触发器 - 在转换后启动的函数。
  • 工作流程 IWorkflow - 实现将实体从一种状态转换到另一种状态的转换的对象。

过程简介

当启动将实体从一种状态转换到另一种状态时,会发生以下情况

  • 根据模式确定是否可以转换
    • 启动该转换的所有条件。
    • 启动该转换的所有验证器。
  • 如果验证成功,则实体的状态将更改。
    • 使用 IEntity 接口管理状态更改。也就是说,所有计划使用此机制的实体都必须实现此接口。
  • 然后启动该转换的所有触发器。

预安装 workflow 组件

此包为 extas 兼容配置(请参阅 jeyroik/extas-installer)提供了以下安装程序

  • 状态安装程序
{
  "workflow_states": [
    {
      "name": "",
      "title": "",
      "description": "",
      "parameters": [
        {
          "name": ""
        }
      ]
    }
  ]
}
  • 转换安装程序
{
  "workflow_transitions": [
    {
      "name": "",
      "title": "",
      "description": "",
      "state_from": "<state.name>",
      "state_to": "<state.name>"
    }
  ]
}
  • 转换处理程序模板安装程序
{
  "workflow_transition_dispatcher_samples": [
    {
      "name": "",
      "title": "",
      "description": "",
      "class": "",
      "parameters": []
    }
  ]
}
  • 模式安装程序
{
  "workflow_schemas": [
    {
      "name": "",
      "title": "",
      "description": "",
      "states": ["<state.name>"],
      "transitions": ["<transition.name>"],
      "parameters": []
    }
  ]
}
  • 转换处理程序安装程序
{
  "workflow_transition_dispatchers": [
    {
      "type": "trigger|validator",
      "name": "",
      "template": "<template.name>",
      "schema_name": "<schema.name>",
      "transition_name": "<transition.name>|*",
      "parameters": []
    }
  ]
}