yuriteixeira / workflow-bundle
将Sebastian Bergaman的工作流组件集成到Symfony 2
Requires
- php: >=5.3.0
- doctrine/doctrine-bundle: 1.2.*
- doctrine/orm: ~2.2,>=2.2.3
- symfony/framework-bundle: ~2.1
- zetacomponents/base: *
- zetacomponents/database: *
- zetacomponents/workflow: *
- zetacomponents/workflow-database-tiein: *
This package is not auto-updated.
Last update: 2020-08-16 15:55:06 UTC
README
如果您需要以工作流方式实现symfony2应用程序的某些部分(如支付状态机或CMS发布流程),您就来到了正确的位置。
此包是在Sebastian Bergman的ezcWorkflow组件的基础上构建的。在开始之前,我们强烈建议您了解其背后的概念(否则,您在定义自己的工作流时可能会感到有些困惑)。
安装
- 在您的composer.json中添加依赖项
yuriteixeira/workflow-bundle并运行composer update - 在AppKernel.php上注册该包,通过在
$bundles数组中添加new Yuriteixeira\WorkflowBundle\WorkflowBundle() - 运行
php app/console。您应该会看到一个名为yuriteixeira的部分,其中包含与工作流相关的命令。 - 运行
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,该命令生成工作流定义的图形表示,如下所示
自定义工作流定义
默认情况下,在您生成工作流后,有一个工作流定义示例在 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(它很棒,但我希望对其进行现代化和简化)