工作流组件
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.1,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
工作流组件
工作流组件提供工具来管理一个工作流或有限状态机。
安装
1
美元作曲家需要symfony /工作流ob娱乐下载
请注意
如果你安装这个组件之外的Symfony应用程序,你必须要求ob娱乐下载供应商/ autoload.php
文件在你的代码,使作曲家提供的类加载机制。读这篇文章为更多的细节。
创建一个工作流
工作流组件给你一个面向对象的方法定义一个过程或一个你的对象的生命周期经历。每一个步骤或阶段的过程被称为的地方。您还做定义转换描述的行动从一个地方到另一个地方。
一组和转换创建了一个地方定义。一个工作流需要一个定义
和写美国的对象(即一个实例MarkingStoreInterface)。
考虑下面的例子为一个博客。一篇文章可以有一个预定义的状态(“草案”,“审核”,“拒绝”,“发表”)。在工作流中,这些状态的地方。您可以定义工作流是这样的:
1 2 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=真正的;/ /如果这个主题可以在只有一个国家在给定的时间美元财产=的现状后;/ /主题属性名的存储状态美元标记=新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(欧宝平台是合法的吗通讯::类));
使用
当你有一个配置注册表
与你的工作流,您可以检索一个工作流从它并使用它,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12
/ /……/ /考虑到美元的blogPost默认“草案”美元博客=新BlogPost ();美元工作流=美元注册表- >get (美元博客);美元工作流- >可以(美元博客,“发布”);/ /错误美元工作流- >可以(美元博客,“to_review”);/ /正确的美元工作流- >应用(美元博客,“to_review”);/ /现在美元的blogPost“综述”美元工作流- >可以(美元博客,“发布”);/ /正确的美元工作流- >getEnabledTransitions (美元博客);/ /美元还可以执行过渡“发布”或“拒绝”
初始化
如果您的对象的属性零
你想设置的initial_marking
从配置中,您可以调用getMarking ()
方法来初始化对象属性:
1 2 3 4 5 6
/ /……美元博客=新BlogPost ();美元工作流=美元注册表- >get (美元博客);/ /启动工作流美元工作流- >getMarking (美元博客);
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。