kitpages/workflow-bundle
这是一个提供工作流系统的Symfony2组件。
v1.0.0
2014-04-24 06:30 UTC
Requires
- php: >=5.3.2
- kitpages/step-bundle: ~1.1
- symfony/console: ~2.3
- symfony/framework-bundle: ~2.3
- symfony/monolog-bundle: ~2.3
Requires (Dev)
- phpunit/phpunit: ~3.7
- symfony/browser-kit: ~2.3
- symfony/class-loader: ~2.3
- symfony/finder: ~2.3
- symfony/yaml: ~2.3
This package is auto-updated.
Last update: 2024-09-04 19:43:35 UTC
README
此组件提供通用的工作流系统。
它已在特定项目中投入生产使用,但应被视为测试版。
用例
想象一下,你(从技术角度)管理3个不同的报纸:“纽约新闻”、“巴黎新闻”和“格勒诺布尔新闻”。
- 对于纽约新闻,文章必须由主编唯一验证(并且作者必须重写,直到主编说可以为止)。然后它应该集成到印刷流程中。
- 对于巴黎新闻,文章首先由秘书验证,然后由一对(来自同一领域的另一作者)和主编验证。然后它应该集成到印刷流程中。
- 对于格勒诺布尔新闻:这是一份在线报纸。没有验证,但编辑可以稍后将其撤回。
你可以构建一个单一的、连贯的代码来管理这3个不同的业务流程。你可以通过工作流系统来实现这一点。每个报纸流程都由一个工作流配置文件表示。
此组件提供构建用于表示任何业务流程的通用工作流系统。
快速入门
- 在config.yml中添加默认步骤
kitpages_workflow: default_step_name: workflow.default kitpages_step: shared_step_list: workflow.default: help: short: "Default step" complete: | This step always return default value class: Kitpages\WorkflowBundle\Step\DefaultStep
- 使用
// create workflow configuration $config=' workflow_definition: name: hello_world init_state: start_state state_list: start_state: event_list: goto_end: step: name: workflow.default next_state: default: end_state cancel: next_state: start_state end_state: event_list: goto_start: next_state: start_state '; // get workflow manager $workflowManager = $this->get("workflow.manager"); // create workflow $workflowConfiguration = YamlWorkflowConfigurationParser::parse($config); $workflow = $workflowManager->createWorkflow("hello_world_instance_workflow", $workflowConfiguration); // dispatch event $dispatcher = $this->get('event_dispatcher'); $actionEvent = new ActionEvent("goto_end"); $dispatcher->dispatch(KitpagesWorkflowEvents::ACTION_EVENT, $actionEvent); // test workflow $this->assertEquals ( "end_state", $workflow->getCurrentState() ); // back to start $dispatcher->dispatch(KitpagesWorkflowEvents::ACTION_EVENT, new ActionEvent("goto_start")); $this->assertEquals ( "start_state", $workflow->getCurrentState() );
组件状态
- 测试版状态
- 部分测试(60%)
- 在travis-ci上
安装
在composer.json中添加KitpagesWorkflowBundle
{ "require": { "kitpages/workflow-bundle": "~1.0" } }
现在运行以下命令让composer下载组件:
$ php composer.phar update kitpages/workflow-bundle
AppKernel.php
$bundles = array( ... new Kitpages\StepBundle\KitpagesStepBundle(), new Kitpages\WorkflowBundle\KitpagesWorkflowBundle(), );
config.yml中的配置非常简单
imports: - { resource: @KitpagesWorkflowBundle/Resources/config/steps.yml } kitpages_workflow: default_step_name: workflow.default
原则
通用机制
- 此组件用于管理状态机
- 工作流配置定义在WorkflowConfiguration对象中
- 机器当前状态实例在Workflow对象中
- 工作流管理器保留每个工作流的引用,监听ActionEvents,运行步骤,更改工作流状态,...
- 步骤包含在接收到ActionEvent后要执行的操作。然后返回的值允许根据配置决定下一个工作流状态。
- 每个工作流状态都监听某些ActionEvent
所有操作都在步骤中完成
步骤是执行某些操作的类。步骤在GitHub上的项目中有文档:KitpagesStepBundle。
我们使用扩展了AbstractWorkflowStep的步骤,它添加了对当前工作流和actionEvent的引用。
步骤示例
配置
kitpages_step: shared_step_list: my_step: help: short: "short description of my step" complete: | Longer description class: Kitpages\MyBundle\Step\MyStep parameter_list: url: test.mydomain.com service_list: logger: logger
步骤代码
use Kitpages\StepBundle\Step\StepEvent; use Kitpages\WorkflowBundle\Step\AbstractWorkflowStep; class MyStep extends AbstractWorkflowStep { public function execute(StepEvent $event = null) { // get current workflow and action event $workflow = $this->getWorkflow(); $actionEvent = $this->getActionEvent(); // extract data from actionEvent $myValue1 = $actionEvent->get("myKey"); $myOtherValue = $actionEvent->get("myOtherKey"); // do someting $logger = $this->getService("logger"); $logger->info("I write a log"); $urlStepParameter = $this->getParameter("url"); // record some values in the workflow object $workflow->set("resultKey", "value calculated"); if ($someResult == true) { return "ok"; } else { return "false"; } } }
更高级的功能
待定:要记录的功能
- 工作流参数
- 子工作流
- 工作流事件和步骤事件
- 工作流配置快捷方式
- 工作流持久化
- 并行多个工作流
版本
- 2014/04/24:v1.0.0 - 第一个稳定版本
路线图
1.x版本保持向后兼容性。
到2014年6月
- 更多测试和文档
- 服务中的yaml解析器(静态调用将保持但已弃用)
- 代理系统的预生成和缓存
以后
- 一个友好的调试界面