arter / amos-workflow
AMOS 工作流系统
Requires
- php: >=5.4.0
- arter/amos-core: ^1.9.50
- cornernote/yii2-workflow-manager: ^1.0.1
- raoul2000/yii2-workflow: ^1.1.0
This package is auto-updated.
Last update: 2024-09-07 10:54:54 UTC
README
模块 Workflow 用于管理使用工作流的记录的工作流程状态转换。Amos Workflow 基于
- raoul2000/yii2-workflow
- cornernote/yii2-workflow-manager
安装
- 安装此扩展的首选方式是通过 Composer。
运行以下命令之一:
composer require arter/amos-workflow
或添加此行
"arter/amos-workflow": "dev-master"
到您的 composer.json
文件的 require 部分。
将模块添加到后端模块配置中
'modules' => [ 'workflow' => [ 'class' => 'arter\amos\workflow\AmosWorkflow', ], ],
应用迁移
a. amos-workflow 迁移
php yii migrate/up --migrationPath=@vendor/arter/amos-workflow/src/migrations
或在控制台中添加此行到您的迁移配置
return [ . . . '@vendor/arter/amos-workflow/src/migrations', . . . ];
配置
//TODO 翻译修复此部分
工作流程的每次状态更改都会被拦截为事件,并在 workflow_transition_log 表中写入记录(请参阅 WorkflowLogFunctionsBehavior)。
定义工作流程模型
amos4 中的经典工作流程包括以下状态:
- 草稿 / draft
- 待验证/请求发布
- 验证/发布
为了自动化/标准化某些操作,在 amos-core 中创建了 WorkflowModelInterface 接口,建议实现,同时扩展 NotifyRecord 以利用例如模型验证请求时的自动邮件功能。
工作流程通过填充表来定义
sw_workflow: 工作流定义 id,在 amos 4 中是模型的名称后跟 'Workflow',例如 'NewsWorkflow'。定义默认初始状态,可以通过接口或迁移修改。例如 initial_status_id = 'DRAFT'
sw_status: 定义工作流程状态。状态将(按照约定)保存到模型的状态字段中,连接 Workflow_id 和 status_id,例如 'NewsWorkflow/BOZZA'
sw_transition: 定义转换,即所有可能的状态转换。重要:如果您遇到了从状态 A 到状态 B 的转换错误,这可能是因为您未定义转换,实际上是由于用户在该状态下保存模型的权限缺失。
sw_metadata: 为工作流程的每个状态定义状态更改按钮上的标签、弹出窗口文本、CSS 类等。还可以注释状态转换并保存此类注释到状态转换日志中。
要启用工作流程事件行为,在您的模型行为数组中插入,例如:
public function behaviors()
{
return ArrayHelper::merge(parent::behaviors(), [
.
.
.
'workflow' => [
'class' => SimpleWorkflowBehavior::className(),
'defaultWorkflowId' => self::NEWS_WORKFLOW,
'propagateErrorsToModel' => true
]
];
}
小部件
Amos Workflow 提供了三个小部件
- WorkflowTransitionButtonsWidget
- WorkflowTransitionStateDescriptorWidget
//TODO 解释/示例使用上述新小部件
- WorkflowTransitionWidget arter\amos\workflow\widgets\WorkflowTransitionWidget
绘制一个包含模型当前状态和从当前状态开始可能更改的状态的按钮(从 sw_metadata 中读取)的节。
状态更改注释/笔记
如果需要,可以显示一个弹出窗口以插入状态更改的注释/笔记;要启用此功能,请将以下元数据添加到 sw_metadata 中为转换最终状态:key = 'comment',value = 1
如果需要,可以使用全局参数来隐藏所有转换小部件,如果模型工作流程被绕过。在您的应用程序后端参数数组中插入以下内容:
return [
.
.
.
'hideWorkflowTransitionWidget' => true
.
.
.
];
```
example of use in a form:
<?= WorkflowTransitionWidget::widget([
'form' => $form,
'model' => $model,
'workflowId' => ShowcaseProject::SHOWCASEPROJECT_WORKFLOW,
'classDivIcon' => 'pull-left',
'classDivMessage' => 'pull-left message',
'viewWidgetOnNewRecord' => true,
'translationCategory' => 'amosshowcaseprojects'
]); ?>