工作流和状态机
编辑本页警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 4.3,现已不再维护。
读本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。
工作流和状态机
工作流
工作流是应用程序中流程的模型。这可能是一篇博客文章如何从草稿到审查和发布的过程。另一个例子是用户提交一系列不同的表单来完成一项任务。这样的过程最好远离您的模型,并且应该在配置中定义。
一个定义工作流的一部分由从一个地方到另一个地方的位置和操作组成。动作被称为转换.工作流还需要知道每个对象在工作流中的位置。的这商店将当前位置写入对象上的属性。
请注意
上面的术语通常用于讨论工作流和佩特里网
例子
最简单的工作流是这样的。它包含两个地方和一个过渡。
当它们描述一个真实的业务案例时,工作流可能会更加复杂。下面的工作流程描述了填写工作申请的流程。
在这个例子中,当你填写一份工作申请时,根据你申请的工作,有4到7个步骤。有些工作需要个性测试、逻辑测试和/或由用户回答的正式要求。有些工作没有。的GuardEvent
用于决定特定应用程序允许的下一步步骤。
通过定义这样的工作流,可以大致了解流程的外观。流程逻辑不与控制器、模型或视图混合。步骤的顺序只能通过更改配置来更改。
状态机
状态机是工作流的一个子集,它的目的是保存模型的状态。它们之间最重要的区别是:
- 工作流可以同时在多个地方,而状态机不能;
- 为了应用转换,工作流要求对象位于转换之前的所有位置,而状态机只要求对象至少位于其中一个位置。
例子
拉请求以初始的“开始”状态开始,然后是“测试”状态,例如在持续集成堆栈上运行测试。完成后,拉取请求处于“审查”状态,贡献者可以要求更改、拒绝或接受拉取请求。在任何时候,您还可以“更新”拉取请求,这将导致另一次持续集成运行。
下面是拉请求状态机的配置。
- YAML
- XML
- PHP
12 34 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:来自:审查:编码接受:来自:审查:合并后的拒绝:来自:审查:关闭重启:来自:关闭:审查
在Symf欧宝娱乐app下载地址ony应用程序中使用默认的服务。yaml的配置,你可以通过注入工作流注册服务来获得这个状态机:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
/ /……使用应用程序\实体\PullRequest;使用欧宝娱乐app下载地址\组件\工作流\注册表;类SomeService{私人$工作流;公共函数__construct(注册表$工作流){$这->工作流=$工作流;}公共函数someMethod(PullRequest$pullRequest){$stateMachine=$这->工作流->get ($pullRequest,“pull_request”);$stateMachine->应用($pullRequest,“wait_for_review”);/ /……}/ /……}
欧宝娱乐app下载地址Symfony自动为每个工作流创建一个服务(工作流)或状态机(StateMachine)您在配置中定义的。这意味着您可以使用workflow.pull_request
或state_machine.pull_request
分别在你的服务定义中访问正确的服务:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/ /……使用应用程序\实体\PullRequest;使用欧宝娱乐app下载地址\组件\工作流\StateMachine;类SomeService{私人$stateMachine;公共函数__construct(StateMachine$stateMachine){$这->stateMachine =$stateMachine;}公共函数someMethod(PullRequest$pullRequest){$这->stateMachine->应用($pullRequest,“wait_for_review”, (“log_comment”= >“我的日志注释为等待审查过渡。”]);/ /……}/ /……}