工作流程和状态机
编辑该页面警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 5.2,不再维护。
读这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。
工作流程和状态机
工作流
工作流模型是一个应用程序的过程。可能是一篇博客文章中如何从草案的过程审核和发布。另一个例子是当用户提交的一系列不同的形式来完成一个任务。这些过程是最好远离您的模型中定义的,应该配置。
一个定义工作流由地方和行动从一个地方到另一个地方。的操作被称为转换。一个工作流中每个对象的位置还需要知道工作流。的这商店写当前对象的一个属性。
请注意
上面的术语是常用的在讨论工作流和佩特里网
例子
最简单的工作流程是这样的。它包含了两个地方,一个过渡。
工作流可以更复杂时,描述一个真正的商业案例。下面的工作流描述了流程填写工作应用程序。
当你填写工作申请在本例中有4到7步骤根据你申请的工作。有些工作需要人格测试,逻辑测试和/或正式的需求是由用户回答。有些工作没有。的GuardEvent
用于决定下一步允许为特定的应用程序。
通过定义一个这样的工作流程,流程如何看起来像有一个概述。的流程逻辑不是混合控制器,模型或视图。步骤的顺序可以改变通过改变配置。
状态机
状态机工作流的一个子集,它的目的是将您的模型。它们之间最重要的区别是:
- 工作流可以在多个地方同时,而状态机不能;
- 为了应用过渡,工作流要求对象在所有之前的过渡的地方,而状态机只要求对象是至少在其中一个地方。
例子
把请求开始在最初的“开始”状态,然后一个状态“测试”如持续集成栈上运行测试。当这个完成后,把请求在“审核”状态,人们可以要求更改,拒绝或接受请求。在任何时候,您还可以“更新”拉请求,这将导致另一个持续集成运行。
下面是配置拉请求状态机。
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39 40
#配置/包/ workflow.yaml框架:工作流程:pull_request:类型:“state_machine”marking_store:类型:“方法”属性:“currentPlace”支持:- - - - - -应用\ \ PullRequest实体initial_marking:开始地方:- - - - - -开始- - - - - -编码- - - - - -测试- - - - - -审查- - - - - -合并后的- - - - - -关闭转换:提交:来自:开始:测试更新:来自:(编码、测试中,审查):测试wait_for_review:来自:测试:审查request_change:来自:审查:编码接受:来自:审查:合并后的拒绝:来自:审查:关闭重启:来自:关闭:审查
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
< !- - - - - -- - - - - -config/packages/workflow.xml -->< /span>< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xmlns:框架=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd //www.oldmanjams.com/schema/dic/symfony //www.oldmanjams.com/schema/dic/symfony/symfony-1.0.xsd”><框架:配置><框架:工作流的名字=“pull_request”类型=“state_machine”><框架:marking-store><框架:类型>方法< /框架:类型><框架:房地产>currentPlace< /框架:房地产>< /框架:marking-store><框架:支持>应用\ \ PullRequest实体< /框架:支持><框架:initial_marking>开始< /框架:initial_marking><框架:地方>开始< /框架:地方><框架:地方>编码< /框架:地方><框架:地方>测试< /框架:地方><框架:地方>审查< /框架:地方><框架:地方>合并后的< /框架:地方><框架:地方>关闭< /框架:地方><框架:过渡的名字=“提交”><框架:从>开始< /框架:从><框架:>测试< /框架:>< /框架:过渡><框架:过渡的名字=“更新”><框架:从>编码< /框架:从><框架:从>测试< /框架:从><框架:从>审查< /框架:从><框架:>测试< /框架:>< /框架:过渡><框架:过渡的名字=“wait_for_review”><框架:从>测试< /框架:从><框架:>审查< /框架:>< /框架:过渡><框架:过渡的名字=“request_change”><框架:从>审查< /框架:从><框架:>编码< /框架:>< /框架:过渡><框架:过渡的名字=“接受”><框架:从>审查< /框架:从><框架:>合并后的< /框架:>< /框架:过渡><框架:过渡的名字=“拒绝”><框架:从>审查< /框架:从><框架:>关闭< /框架:>< /框架:过渡><框架:过渡的名字=“重启”><框架:从>关闭< /框架:从><框架:>审查< /框架:>< /框架:过渡>< /框架:工作流>< /框架:配置>< /容器>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
/ /配置/包/ workflow.php美元容器- >loadFromExtension (“框架”,(/ /……“工作流程”= > [“pull_request”= > [“类型”= >“state_machine”,“marking_store”= > [“类型”= >“方法”,“属性”= >“currentPlace”),“支持”= > [“App \实体\ PullRequest”),“initial_marking”= >“开始”,“地方”= > [“开始”,“编码”,“测试”,“审查”,“合并”,“关闭”),“转换”= > [“提交”= > [“从”= >“开始”,”到“= >“测试”),“更新”= > [“从”= > [“编码”,“测试”,“审查”),”到“= >“测试”),“wait_for_review”= > [“从”= >“测试”,”到“= >“审查”),“request_change”= > [“fr