工作流组件

工作流组件

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

安装

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

请注意

如果在Symfony应用程序之外安装此组件,则必须使用欧宝娱乐app下载地址供应商/ autoload.php以启用Composer提供的类自动加载机制。读这篇文章为更多的细节。

创建一个工作流

工作流组件为您提供了一种面向对象的方式来定义您的对象所经过的流程或生命周期。流程中的每一步或阶段称为的地方。你也可以定义转换描述从一个地方到另一个地方的动作。

. . / _images / states_transitions.png

一组地点和过渡创建定义。工作流需要定义以及将各种写入对象的方法(即a的实例欧宝娱乐app下载地址Symfony \组件\ \ MarkingStore \ MarkingStoreInterface工作流)。

考虑以下博客文章的例子。POST可以具有许多预定义状态之一(草案,综述了,拒绝了,发表)。在工作流中,这些状态被调用的地方。你可以这样定义工作流:

使用欧宝娱乐app下载地址Symfony \组件\ \ DefinitionBuilder工作流;使用欧宝娱乐app下载地址symfony \ component \ workflow \ markingstore \ preticalmarkingstore;使用欧宝娱乐app下载地址Symfony \工作流组件\ \过渡;使用欧宝娱乐app下载地址symfony \ component \ workflow \ workflow;definitionBuilder美元=DefinitionBuilder();$定义=definitionBuilder美元->addPlaces([“草案”,“审查”,'拒绝了',“发布”])//转换被定义为一个唯一的名称,一个起始位置和一个目标位置->addTransition(过渡(“to_review”,“草案”,“审查”))->addTransition(过渡(“发布”,“审查”,“发布”))->addTransition(过渡(“拒绝”,“审查”,'拒绝了'))->建造();singleState美元=真正的;//如果主题在给定时间只能处于一种状态,则为true美元的财产=的现状后;//存储状态的subject属性名美元的标志=MethodMarkingStore(singleState美元,美元的财产);美元的工作流=工作流($定义,美元的标志);

工作流现在可以帮助你决定什么转换(行动)是允许在一个博客文章取决于什么的地方(表明)它在。这将使域逻辑保持在一个地方,而不是分散在整个应用程序中。

当您定义多个工作流时,您应该考虑使用注册表,该对象存储并提供对不同工作流的访问。注册表还可以帮助你决定一个工作流是否支持你要使用它的对象:

使用Acme \实体\博客;使用Acme \实体\通讯欧宝app在哪里找;使用欧宝娱乐app下载地址Symfony \工作流组件\ \注册表;使用欧宝娱乐app下载地址Symfony \组件\ \ SupportStrategy \ InstanceOfSupportStrategy工作流;blogPostWorkflow美元=;n欧宝app在哪里找ewsletterWorkflow美元=;美元注册表=注册表();美元注册表->addWorkflow(blogPostWorkflow美元,instanceofsupportstrategy.(Blogpost.::));美元注册表->addWorkflow(n欧宝app在哪里找ewsletterWorkflow美元,instanceofsupportstrategy.(欧宝app在哪里找通讯::));

使用

当配置了a注册表有了你的工作流,你可以从它检索一个工作流,并使用它如下:

/ /……//假设$blogPost默认是“草稿”美元的blogPost=Blogpost.();美元的工作流=美元注册表->得到(美元的blogPost);美元的工作流->能够(美元的blogPost,“发布”);// 错误的美元的工作流->能够(美元的blogPost,“to_review”);/ /正确的美元的工作流->应用(美元的blogPost,“to_review”);// $blogPost现在是“审查”美元的工作流->能够(美元的blogPost,“发布”);/ /正确的美元的工作流->getEnableTRansitions.(美元的blogPost);// $ blogpost可以执行转换“发布”或“拒绝”

初始化

如果对象的属性是你想把它设置成initial_marking从配置中,可以调用getMarking ()初始化对象属性的方法:

/ /……美元的blogPost=Blogpost.();美元的工作流=美元注册表->得到(美元的blogPost);/ /启动工作流美元的工作流->getMarking(美元的blogPost);

了解更多

阅读更多关于the的用法工作流组件Symfony应用欧宝娱乐app下载地址程序内部。

这项工作包括代码样本,是在a下获得的许可创作共用BY-SA 3.0许可证。