工作流组件
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 5.2,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
工作流组件
Workflow组件提供了用于管理工作流或有限状态机的工具。
安装
1
$作曲家需要symfony/工作流ob娱乐下载
请注意
如果在Symfony应用程序外部安装此组件,则必须要求ob娱乐下载供应商/ autoload.php
文件,以启用Composer提供的类自动加载机制。读这篇文章欲知详情。
创建工作流
工作流组件为您提供了一种面向对象的方法来定义对象所经历的过程或生命周期。过程中的每一步或阶段被称为的地方.你也需要定义转换描述了从一个地方到另一个地方的动作。
位置和过渡的集合创建定义.工作流需要一个定义
以及一种将状态写入对象的方法(即a的实例)MarkingStoreInterface).
考虑下面一篇博客文章的例子。一篇文章可以有一种预定义的状态(' draft ', ' review ', ' reject ', ' published ')。在工作流中,这些状态被调用的地方.你可以这样定义工作流:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
使用ob娱乐下载\组件\工作流\DefinitionBuilder;使用ob娱乐下载\组件\工作流\MarkingStore\MethodMarkingStore;使用ob娱乐下载\组件\工作流\过渡;使用ob娱乐下载\组件\工作流\工作流;$definitionBuilder=新DefinitionBuilder ();$定义=$definitionBuilder->addPlaces ([“草案”,“审查”,“拒绝”,“发布”])//转换使用唯一的名称、起始位置和目标位置定义->addTransition (新过渡(“to_review”,“草案”,“审查”))->addTransition (新过渡(“发布”,“审查”,“发布”))->addTransition (新过渡(“拒绝”,“审查”,“拒绝”))->build ();$singleState=真正的;//如果subject在给定时间内只能处于一种状态,则为true$财产=的现状后;//存储状态的主题属性名$标记=新MethodMarkingStore ($singleState,$财产);$工作流=新工作流($定义,$标记);
的工作流
现在能帮你决定什么转换(动作)被允许出现在博客文章中,这取决于什么的地方(州)它在。这将使您的域逻辑保持在一个地方,而不是分布在整个应用程序中。
定义多个工作流时,应考虑使用注册表
,它是一个存储并提供对不同工作流的访问的对象。注册表还将帮助您确定工作流是否支持您试图使用它的对象:
1 2 3 4 5 6 7 8 9 10 11
使用Acme\实体\博客;使用Acme\实体\欧宝平台是合法的吗通讯;使用ob娱乐下载\组件\工作流\注册表;使用ob娱乐下载\组件\工作流\SupportStrategy\InstanceOfSupportStrategy;$blogPostWorkflow=……;$欧宝平台是合法的吗newsletterWorkflow=……;$注册表=新注册表();$注册表->addWorkflow ($blogPostWorkflow,新InstanceOfSupportStrategy(博客::类));$注册表->addWorkflow ($欧宝平台是合法的吗newsletterWorkflow,新InstanceOfSupportStrategy(欧宝平台是合法的吗通讯::类));
使用
配置了注册表
对于您的工作流,您可以从中检索一个工作流,并按以下方式使用它:
12 3 4 5 6 7 8 9 10 11 12
/ /……//默认$blogPost为“draft”$博客=新BlogPost ();$工作流=$注册表->get ($博客);$工作流->可以($博客,“发布”);/ /错误$工作流->可以($博客,“to_review”);/ /正确的$工作流->应用($博客,“to_review”);// $blogPost已被审核$工作流->可以($博客,“发布”);/ /正确的$工作流->getEnabledTransitions ($博客);// $blogPost可以执行“publish”或“reject”转换
初始化
如果对象的属性为零
你想用initial_marking
从配置中,可以调用getMarking ()
方法初始化对象属性:
1 2 3 4 5 6
/ /……$博客=新BlogPost ();$工作流=$注册表->get ($博客);//启动工作流$工作流->getMarking ($博客);
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。