Download the PHP package wiseadmin/wise-workflow without Composer

On this page you can find all versions of the php package wiseadmin/wise-workflow. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package wise-workflow

Wise-Workflow 工作流引擎

基于 ThinkPHP 6/8 的轻量级工作流引擎,深度集成 WiseAdmin 框架的 RBAC、插件系统和事件系统
设计思想参考 Symfony Workflow,专为 WiseAdmin 生态定制
版本:v2.0 | PHP >= 8.1 | ThinkPHP >= 6.0

PHP Version ThinkPHP Packagist


目录


概述

Wise-Workflow 是 WiseAdmin 生态的工作流引擎组件,采用状态机模型(Place-Transition),可为任意业务对象(如订单、工单、审批单等)添加状态流转能力。它提供了完整的工作流定义、状态转换、权限检查、事件触发和历史记录等功能。

设计理念

设计原则 说明
轻量级 只实现 80% 项目需要的功能,避免功能冗余
深度集成 与 WiseAdmin 的 RBAC、插件系统、事件系统、数据库层无缝对接
易用性 插件开发者使用成本低,与 ThinkPHP 框架风格一致
可扩展性 支持自定义守卫、存储、事件监听

功能特性


核心概念

概念 英文 类 说明
工作流 Workflow wise\workflow\Workflow 工作流定义,包含名称、所有状态、所有转换规则、初始状态、元数据
状态节点 Place wise\workflow\Place 工作流中的一个状态,如 "draft"(草稿)、"reviewing"(审核中)
转换规则 Transition wise\workflow\Transition 状态间的转换路径,定义从哪些状态(from)可以转换到哪些状态(to)
标记 Marking array 当前对象所处的工作流状态集合(如 ['draft' => 1])
引擎 WorkflowEngine wise\workflow\WorkflowEngine 核心执行引擎,负责 apply()、can()、init() 等操作
注册表 WorkflowRegistry wise\workflow\WorkflowRegistry 全局工作流管理中心,支持静态注册和数据库动态加载
状态存储 MarkingStore wise\workflow\MarkingStoreInterface 持久化存储工作流状态的接口(默认实现:数据库)
守卫 Guard wise\workflow\GuardListener 权限检查机制,确保只有授权用户才能执行特定转换

状态转换示意图


架构设计

分层结构

Wise-Workflow 采用双层架构设计:

目录结构


安装与配置

前置条件

通过 Composer 安装

数据库表创建

Wise-Workflow 使用 标准 ThinkPHP 迁移 管理数据库表,保证升级时表结构和初始化数据的一致性与可追溯性。

创建数据库表分为两步:

提示:wise:workflow:publish 命令会自动将包内的迁移文件复制到 database/migrations/ 目录。如果目标文件已存在会自动跳过。

ServiceProvider 自动注册(最小绑定)

Wise-Workflow 通过 Composer 自动发现机制加载 Service 类,仅做一项必要绑定:

绑定 说明
MarkingStoreInterface → DatabaseMarkingStore 状态存储接口实现

其余类(WorkflowEngine、WorkflowRegistry、Place、Transition 等)由用户主动 use 导入后直接使用,保持依赖关系清晰可见:

安装后运行 composer dump-autoload 使 Service 自动发现生效即可。


快速上手

步骤一:定义工作流

在插件或应用代码中定义一个工作流:

步骤二:注册工作流

将定义好的工作流注册到全局注册表:

步骤三:使用工作流引擎

三步走总结


API 参考

定义工作流

Place 类(状态节点)

示例:

Transition 类(转换规则)

示例:

Workflow 类(工作流定义)


注册工作流

WorkflowRegistry 类

两种注册方式:


引擎操作

WorkflowEngine 类

核心方法说明

方法 说明 返回值
init(Workflow $workflow, string $subject, array $context) 初始化工作流(设置到初始状态) void
apply(Workflow $workflow, string $subject, string $transitionName, array $context) 执行一次状态转换 array 转换后的新状态
can(Workflow $workflow, string $subject, string $transitionName, array $context) 检查是否可执行转换 bool
getEnabledTransitions(Workflow $workflow, string $subject) 获取当前可用的转换列表 Transition[]
getMarking(string $subject) 获取当前状态 array
setMarking(string $subject, array $marking, array $context) 设置状态 void
getHistory(string $subject, int $limit = 50) 获取转换历史 array

apply() 完整执行流程

subject 参数说明

subject 是流程实例的唯一标识,格式为 {类型}:{ID}:


组合 Facade

在 WiseAdmin 应用层中,提供了一个增强版的组合 Facade,一行代码完成常用操作:

方法 说明 示例
init($workflowName, $subject) 初始化工作流状态 Workflow::init('order_approval', $order)
apply($workflowName, $subject, $transition, $context) 执行状态转换 Workflow::apply('order_approval', $order, 'submit')
can($workflowName, $subject, $transition) 检查是否可执行 Workflow::can('order_approval', $order, 'submit')
transitions($workflowName, $subject) 获取可用转换列表 Workflow::transitions('order_approval', $order)
marking($workflowName, $subject) 获取当前状态 Workflow::marking('order_approval', $order)
is($workflowName, $subject, $place) 判断是否处于某状态 Workflow::is('order_approval', $order, 'draft')
exists($workflowName) 判断工作流是否存在 Workflow::exists('order_approval')
register($workflow) 注册工作流 Workflow::register($workflow)
history($workflowName, $subject, $limit) 获取历史记录 Workflow::history('order_approval', $order, 10)

完整示例:


权限守卫

Wise-Workflow 通过 GuardListener 实现基于 RBAC 的权限控制。

GuardListener 类

工作原理

使用方式

方式一:在 Transition 上绑定权限字符串(推荐)
方式二:在上下文 Context 中传递权限

权限命名规范

模式 说明 示例
{module}.{action} 模块级权限 order.submit, order.approve
workflow.{name}.{transition} 工作流转换权限 workflow.order_approval.approve
workflow.{name}.* 工作流全部权限 workflow.order_approval.*
workflow.* 所有工作流权限 workflow.*

事件系统

工作流引擎在每次状态转换前后会触发事件,支持开发者注册监听器实现自定义逻辑。

事件列表

事件名称 触发时机 参数 用途
workflow.before_transition 转换执行前 {workflow, transition, subject, context} 权限检查、前置条件验证、阻止非法操作
workflow.after_transition 转换执行后 {workflow, transition, subject, context} 记录日志、发送通知、更新关联数据
workflow.{name}.{transition} 特定转换执行后 {workflow, transition, subject, context} 特定场景的自定义逻辑

使用示例

阻止非法转换


历史记录

每一次状态转换都会自动记录到 workflow_history 表中。

查询历史

历史记录数据结构


数据库表结构

Wise-Workflow 使用三张核心表:

workflow_definition(工作流定义表)

字段 类型 说明
id INT(11) PK 主键ID
name VARCHAR(50) UNIQUE 工作流名称(唯一标识)
title VARCHAR(100) 工作流显示名称
description VARCHAR(255) 工作流描述
places TEXT(JSON) 状态节点列表,如 ["draft","submitted","approved"]
transitions TEXT(JSON) 转换规则列表,如 [{"name":"submit","from":["draft"],"to":["submitted"]}]
initial_place VARCHAR(50) 初始状态名称
status TINYINT(1) 1=启用, 0=禁用
create_time DATETIME 创建时间
update_time DATETIME 更新时间

workflow_marking(状态标记表)

字段 类型 说明
id INT(11) PK 主键ID
subject VARCHAR(100) UNIQUE 流程实例标识(如 order:1001)
marking TEXT(JSON) 当前状态标记,如 {"submitted":1}
create_time DATETIME 创建时间
update_time DATETIME 更新时间

workflow_history(历史记录表)

字段 类型 说明
id INT(11) PK 主键ID
subject VARCHAR(100) INDEXED 流程实例标识
transition_name VARCHAR(50) INDEXED 转换名称
from_place VARCHAR(50) 源状态
to_place VARCHAR(50) 目标状态
context TEXT(JSON) 上下文数据
user_id INT(11) 操作用户ID
ip VARCHAR(45) 操作IP
user_agent VARCHAR(255) 浏览器标识
create_time DATETIME INDEXED 创建时间

插件集成指南

在 WiseAdmin 插件中使用工作流引擎只需三步:

第一步:在 Plugin.php 中定义工作流

第二步:在 BootServiceProvider.php 中注册

第三步:在控制器中使用

在 manifest.json 中添加菜单和权限


WorkflowDemo 演示插件

WiseAdmin 提供了一个完整的 WorkflowDemo 演示插件,位于 plugins/workflowdemo/,展示订单审批工作流的完整实现。

演示工作流

权限标识

权限标识 对应操作
workflow.order.submit 提交审核
workflow.order.assign 分配审核员
workflow.order.approve 审核通过
workflow.order.reject 审核拒绝
workflow.order.resubmit 重新提交
workflow.order.cancel 取消订单

目录结构

运行演示


与 WiseAdmin 框架集成

容器绑定(自动完成)

Service 类通过 Composer 自动发现加载,仅绑定 MarkingStoreInterface → DatabaseMarkingStore。

使用时直接导入对应类即可:


CLI 命令

wise:workflow:publish 命令会完成以下操作:

  1. 扫描包内 src/migrations/ 目录下的迁移文件
  2. 逐个复制到 database/migrations/ 目录
  3. 如果目标文件已存在,自动跳过
  4. 输出完成提示,引导用户执行系统迁移

进阶用法

自定义状态存储

默认使用数据库存储(workflow_marking 表),可以扩展到 Redis 等:

自定义守卫条件

高级场景下可使用回调守卫:

工作流定义存储到数据库

将工作流定义存储到 workflow_definition 表,实现动态管理:

业务对象的状态冗余

建议在业务表中冗余存储当前状态字段,方便查询:


常见问题

Q: 如何判断当前工作流状态?

Q: 如何获取当前可执行的操作列表?

Q: 如何自定义权限检查逻辑?

修改 Transition 的 guard 回调即可:

Q: 一个业务对象可以绑定多个工作流吗?

可以。每个工作流通过 name 区分,绑定到不同的 subject,互不影响。同一个业务对象可以通过不同的 subject 标识绑定不同工作流:

Q: 如何回滚到上一个状态?

工作流引擎本身不提供"回滚"功能。如果需要,可以定义一个反向的 Transition:

Q: 表前缀如何配置?

Wise-Workflow 使用 ThinkPHP 的数据库连接配置,自动适配项目中的表前缀设置(ws_):


开发与测试

运行单元测试

依赖

依赖 版本要求 说明
PHP >= 7.4 核心语言
topthink/framework >= 6.0 ThinkPHP 6 框架
topthink/think-orm >= 3.0 ThinkORM 数据库组件

开发依赖

依赖 版本 说明
phpunit/phpunit >= 9.0 单元测试
mockery/mockery >= 1.0 Mock 框架

许可协议

MIT License


更多信息请参考 WiseAdmin 框架文档和 WorkflowDemo 演示插件。


All versions of wise-workflow with dependencies

PHP Build Version
Package Version
Requires php Version >=8.1
topthink/framework Version ^8.0
topthink/think-orm Version ^3.0
wiseadmin/wise-support Version 1.0.*
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package wiseadmin/wise-workflow contains the following files

Loading the files please wait ...