vespolina / workflow
Vespolina 处理工作流的库
dev-master
2015-05-22 00:48 UTC
Requires
- php: >=5.3.0
- psr/log: 1.0.0
Requires (Dev)
- bernard/bernard: >=0.11.0,<1.0.0
- monolog/monolog: 1.6.*
- phpspec/phpspec: 2.0.*@dev
Suggests
- bernard/bernard: >=0.11.0,<1.0.0
This package is auto-updated.
Last update: 2024-09-18 20:49:06 UTC
README
Workflow 是一个库,它允许您首先使用弧线将位置和事务相互连接来构建一个图。然后允许您遍历创建的工作流,每个遍历都可以通过一个令牌来识别。遍历从输入位置节点开始,以给定工作流的一个输出位置节点结束。Workflow 使用记录器来记录遍历的细节。
可令牌化的节点可以执行自定义实现。这些自定义实现可以用于执行基于 Web 应用程序或其他基于过程的系统的流程。
安装
composer require vespolina/workflow dev-master
使用
假设我们想要一个类似以下的工作流
O -> [A] -> O -> [B] -> O
in p1 out
实现并运行它的代码将看起来像这样
<?php use Vespolina\Workflow\Task\Automatic; use Vespolina\Workflow\Place; use Vespolina\Workflow\Workflow; use Vespolina\Workflow\Token; use Vespolina\Workflow\TokenInterface; use Monolog\Logger; class NodeA extends Automatic { public function execute(TokenInterface $token) { if ($token->getData('autoB')) { return false; } $token->setData('autoA', true); return true; } } class NodeB extends Automatic { public function execute(TokenInterface $token) { if (!$token->getData('autoA')) { return false; } $token->setData('autoB', true); return true; } } $logger = new Logger('test'); $workflow = new Workflow($logger); // create sequence $a = new NodeA(); $b = new NodeB(); $place = new Place(); $place->setWorkflow($workflow, $logger); $workflow->addNode($a, 'a'); $workflow->addNode($place, 'p1'); $workflow->addNode($b, 'b'); $workflow->connectToStart('a'); $workflow->connect('a', 'p1'); $workflow->connect('p1', 'b'); $workflow->connectToFinish('b'); $workflow->accept(new Token());
我们将在日志中看到遍历
... test.INFO: Token accepted into workflow {"token":"[object] (Vespolina\\Workflow\\Token: {})"} []
... test.INFO: Token advanced into workflow.start {"token":"[object] (Vespolina\\Workflow\\Token: {})"} []
... test.INFO: Token advanced into a {"token":"[object] (Vespolina\\Workflow\\Token: {})"} []
... test.INFO: Token advanced into p1 {"token":"[object] (Vespolina\\Workflow\\Token: {})"} []
... test.INFO: Token advanced into b {"token":"[object] (Vespolina\\Workflow\\Token: {})"} []
... test.INFO: Token advanced into workflow.finish {"token":"[object] (Vespolina\\Workflow\\Token: {})"} []