yuriteixeira/workflow-bundle

该包已被废弃,不再维护。未建议替代包。

将Sebastian Bergaman的工作流组件集成到Symfony 2

dev-master 2013-05-13 15:25 UTC

This package is not auto-updated.

Last update: 2020-08-16 15:55:06 UTC


README

如果您需要以工作流方式实现symfony2应用程序的某些部分(如支付状态机或CMS发布流程),您就来到了正确的位置。

此包是在Sebastian Bergman的ezcWorkflow组件的基础上构建的。在开始之前,我们强烈建议您了解其背后的概念(否则,您在定义自己的工作流时可能会感到有些困惑)。

安装

  1. 在您的composer.json中添加依赖项 yuriteixeira/workflow-bundle 并运行 composer update
  2. 在AppKernel.php上注册该包,通过在 $bundles 数组中添加 new Yuriteixeira\WorkflowBundle\WorkflowBundle()
  3. 运行 php app/console。您应该会看到一个名为 yuriteixeira 的部分,其中包含与工作流相关的命令。
  4. 运行 php app/console doctrine:schema:update 以在数据库中添加我们工作流所需的表。

好的!让我们动手吧。

使用

生成您自己的工作流

此包旨在让您的生命变得简单。因此,我们不会向您提供如何手动创建工作流的复杂说明,而是从您的手中接管了这个枯燥且容易出错的工作!

您所需要做的只是运行 yuriteixeira:workflow:generate。这个代码生成器将生成所有必要的文件结构,更新您的AppKernel,然后您只需根据需要定制代码即可。

理解生成的文件结构

├── MyWorkflow
│   ├── Action
│   │   ├── CheckResultAction.php
│   │   ├── DoSomethingAction.php
│   │   ├── WorkflowBeginAction.php
│   │   └── WorkflowEndAction.php
│   ├── Command
│   │   └── GetWorkflowImageCommand.php
│   ├── DependencyInjection
│   │   ├── Configuration.php
│   │   └── MyWorkflowExtension.php
│   ├── MyWorkflow.php
│   ├── Resources
│   │   └── config
│   │       └── services.yml
│   ├── Service
│   │   └── MyWorkflowService.php
│   ├── Tests
│   │   └── Integration
│   │       └── Service
│   │           └── MyWorkflowServiceTest.php
│   ├── WorkflowDefinition.php
│   ├── WorkflowExecution.php
│   └── WorkflowExecutionFactory.php

重要的命名空间和类

  • WorkflowDefinition.php - 在这里,您以ezcWorkflow的方式定义您的工作流(通过PHP代码而不是简单的YAML或XML方式定义工作流可能有些奇怪,但我承诺很快就会弥补这一点)。
  • Service\MyWorkflowService.php - 在这里,您定义核心功能,这些功能将通过您的 Action 类可访问。此类将由Symfony的依赖注入容器管理,其ID可在 Resources/config/services.yml 中找到。
  • GetWorkflowImageCommand.php - 此CLI命令公开了 workflow-my-workflow:generate-workflow-image,该命令生成工作流定义的图形表示,如下所示

image

自定义工作流定义

默认情况下,在您生成工作流后,有一个工作流定义示例在 WorkflowDefinition.php 中。

您的业务工作流应位于 MyWorkflow\Action 命名空间中。只需遵循示例即可。

根据您的需求修改 WorkflowDefinition 类(查看此 教程 了解如何链接工作流节点)。

开始

您生成的每个工作流都在 Symfony 的依赖注入容器中暴露了一个服务。检查您的工作流的 services.yml 文件中的名称。假设它的名称是 workflow.my_workflow,在控制器中启动它

$this->get('workflow.my_workflow')->startNewWorkflowExecution();

恢复暂停的工作流

工作流可以被暂停和恢复。

要暂停它,在您的 Action 类的 run 方法中,返回 false 而不是 true

要恢复它,运行 yuriteixeira:workflow:resume

技术债务(您可能可以提供帮助!)

  • 测试
  • 构建任务(phpcs、phpmd、代码覆盖率等)
  • 将仓库添加到 Travis CI
  • 通过服务的 resumeWorkflowExecution($executionId) 方法恢复工作流
  • CLI 参数仅恢复一个工作流

未来功能

  • 通过 YAML 配置定义工作流
  • 独立于 workflow-database-tiein,它限制了数据库驱动程序的选择(应使用 PDO/DBAL)
  • 独立于 Sebastian Bergman 的 ezcWorkflow(它很棒,但我希望对其进行现代化和简化)