工作流组件

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 5.3,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

工作流组件

Workflow组件提供了用于管理工作流或有限状态机的工具。

安装

1
作曲家需要symfony/工作流欧宝娱乐app下载地址

请注意

如果在Symfony应用程序外部安装此组件,则必须要求欧宝娱乐app下载地址供应商/ 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
使用欧宝娱乐app下载地址组件工作流DefinitionBuilder使用欧宝娱乐app下载地址组件工作流MarkingStoreMethodMarkingStore使用欧宝娱乐app下载地址组件工作流过渡使用欧宝娱乐app下载地址组件工作流工作流definitionBuilderDefinitionBuilder ();定义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实体欧宝app在哪里找通讯使用欧宝娱乐app下载地址组件工作流注册表使用欧宝娱乐app下载地址组件工作流SupportStrategyInstanceOfSupportStrategyblogPostWorkflow=……;欧宝app在哪里找newsletterWorkflow=……;注册表注册表();注册表->addWorkflow (blogPostWorkflowInstanceOfSupportStrategy(博客::类));注册表->addWorkflow (欧宝app在哪里找newsletterWorkflowInstanceOfSupportStrategy(欧宝app在哪里找通讯::类));

使用

配置了注册表对于您的工作流,您可以从中检索一个工作流,并按以下方式使用它:

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 (博客);

了解更多

的用法阅读更多工作流组件在Symfony应欧宝娱乐app下载地址用程序中。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。
欧宝娱乐app下载地址Symfony 5.3支持通过JoliCode