jeyroik/extas-workflow-example

此包的最新版本(1.0.0)没有提供许可证信息。

Extas 工作流程包使用示例

1.0.0 2020-03-13 12:27 UTC

This package is auto-updated.

Last update: 2024-09-18 19:14:14 UTC


README

使用 jeyroik/extas-workflow 的示例

安装 workflow

# vednor/bin/extas i

启动

extas-workflow-example# php -S localhost:8080 -t src/public

之后,您应该在 https://:8080 页面上看到以下内容

Current state = todo
Available actions (transitions):
 get_in_work (change status to "in_work")
 not_actual__from_todo (change status to "not_actual")

Run transition to "in_work":
Transition runtime data:
=====================
Привет мир
Entity new state is "in_work"

=====================
Transition result: success
Сбросить

说明

  • 在示例中设置了4个状态:todoin_workdonenot_actual
  • 对于这些状态,设置了以下转换:get_in_workdonenot_actual
  • 还设置了一些处理转换的模板。
    • trigger__hello_world - 转换后输出在上下文中设置的“Hello world”语言的消息。
    • trigger__transition_finished - 输出消息,表明实体已转换为新的状态,并指明新状态名称。
    • validator__hello_jeyroik - 检查上下文中是否存在参数 name 并且其等于字符串 jeyroik
    • validator__context_params - 检查上下文中是否存在在处理器中指定的参数。
    • validator__entity_params - 检查正在改变状态的实体中是否存在在处理器中指定的参数。
  • 此外,设置了一个包含所有之前提到的状态和转换的方案。
  • 对于设置的方案 workflow,立即设置特定的触发器和验证器。

示例解决的问题描述

  • 存在一个处于 todo 状态的 DemoEntity 实体。
  • 需要将此实体通过方案的所有转换。
  • 需要以俄语输出短语“Привет мир”。
  • 需要在每次状态改变后输出相应的消息。
  • 需要保证过渡中使用名称 'jeyroik'。
  • 需要保证在将实体转换为 done 状态后,上下文中的参数 success 等于 true
  • 需要保证在将实体转换为 done 状态后,实体中的参数 operated 等于 true

解决方案

  • 为了解决这个问题,我们将以下数据放入上下文
$context = new WorkflowEntityContext([
   'name' => 'jeyroik',
   'lang' => 'ru'
]);
  • 接下来,为所有转换设置按模板 trigger__transition_finished 的触发器。
  • 此外,在转换到 done 状态上,根据上下文参数和实体参数分别挂上按模板 validator__context_paramsvalidator__entity_params 的验证器。
  • 为了满足关于 successoperated 的要求,创建一个插件,它将响应状态转换到 done
    • 为此,插件必须响应阶段 workflow.to.done

所有这些共同解决了提出的问题,满足所有要求。