Symfony欧宝娱乐app下载地址 4.3中的新功能:工作流改进
警告:这篇文章是关于一个不受支持的Symfony版本。欧宝娱乐app下载地址有些信息可能已经过时了。阅读最新的Symfony文档欧宝娱乐app下载地址.
在Sy欧宝娱乐app下载地址mfony 4.3中,我们改进了工作流组件有很多主要和次要的功能。这篇博文总结了其中最重要的几个。
添加上下文到<代码translate="no" class="notranslate">工作流程:申请()代码>
提供的
格雷戈勒Pineau
在# 29146.
当应用转换时,现在可以传递自定义<代码translate="no" class="notranslate">美元的上下文代码>(例如,执行转换的用户或当前日期):
1 2 3
$工作流->应用($文章,$请求->请求->get (“过渡”), (“时间”= >日期(y-m-d H:我:年代”)));代码>
在使用此功能之前,更新您的实体或工作流支持的任何其他对象,如下所示:
1 2 3 4
Article {-公共函数setMarking($marking)+公共函数setMarking($marking, $context = [])
然后,更新工作流的配置以使用<代码translate="no" class="notranslate">MethodMarkingStore代码>:
1 2 3 4 5 6 7
框架:工作流:文章:类型:工作流marking_store:—type: multiple_state+类型:method
允许修改监听器中的上下文
提供的
格雷戈勒Pineau
在# 30902.
在每次调用时传递上下文<代码translate="no" class="notranslate">- >应用()代码>可能会很烦人,并导致重复的代码。
现在你可以创建一个监听器来为你做这些事情:
12 3 4 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
类TransitionEventSubscriber实现了EventSubscriberInterface{私人$tokenStorage;公共函数__construct(TokenStorageInterface$tokenStorage){$这->tokenStorage =$tokenStorage;}公共函数onWorkflowArticleTransition(TransitionEvent$事件){$上下文=$事件->getContext ();$令牌=$这->tokenStorage->getToken ();如果($令牌运算符TokenInterface) {$用户=$令牌->getUser ();如果($用户运算符用户界面){$上下文[“用户”] =$用户->getUsername ();}}$事件->setContext ($上下文);}公共静态函数getSubscribedEvents(){返回[TransitionEvent::类= >“onWorkflowArticleTransition”,);}}代码>
为转储工作流添加了颜色
提供的
亚历克西斯Lefebvre
在# 29538.
,现在可以配置工作流的呈现方式了<代码translate="no" class="notranslate">dump_style代码>元数据配置选项:
1 2 3 4 5 6 7 8 9 10
转换:提交:来自:开始:特拉维斯元数据:标题:过渡提交标题dump_style:标签:“我的定制标签”arrow_color:“# 0088 ff”label_color:“红色”
这是自定义样式的样子:
允许配置许多初始位置
提供的
格雷戈勒Pineau
在# 30468而且# 30890.
与状态机不同,当使用工作流时,可以在许多地方拥有一个主题。这就是为什么组件现在允许配置多个最初的地方:
1 2 3 4 5
工作流程:文章:类型:工作流initial_marking:(foo,酒吧)地方:(foo,酒吧,一个,b,c,d]
简单的配置
提供的
格雷戈勒Pineau
在# 30551而且# 30890.
如上所述,主题只能位于状态机中的一个位置,但在使用工作流时,它们可以处于一个或多个状态。然而,工作流组件的初始设计允许使用带有单一状态标记存储的工作流。这不是最好的决定,它增加了一些不必要的复杂性。
从Symfony 4.3开始欧宝娱乐app下载地址,如果您的主题只能处于一种状态,请使用状态机。在这种情况下,属性(称为<代码translate="no" class="notranslate">标记代码>默认情况下)将是一个字符串。如果主题可以在很多地方,请使用工作流。在这种情况下,属性将是一个数组。
由于这种简化,我们改进了DX(开发者体验):
12 3 4 5 6 7 8 9 10 11 12
框架:工作流程:文章:类型:工作流marking_store:类型:方法#这将是Symfony 5.0中的默认值欧宝娱乐app下载地址属性:标记#这是默认值,可以省略任务:类型:state_machinemarking_store:类型:方法#这将是Symfony 5.0中的默认值欧宝娱乐app下载地址属性:状态
添加<代码translate="no" class="notranslate">workflow_transition_blockers ()代码>理解函数
提供的
格雷戈勒Pineau
在# 30908.
在Sy欧宝娱乐app下载地址mfony 4.1中,我们添加了一个特性来了解为什么转换会被阻塞。
在Sy欧宝娱乐app下载地址mfony 4.3中,我们添加了一个Twig函数来构建屏蔽列表:
12 3 4 5 6 7 8 9 10 11 12
<h2>出版被阻止的原因是:h2><ul>{%为workflow_transition_blockers中的阻止程序(文章,'publish') %}<李>{{拦截器。消息}}{#显示守卫表达式#}{%如果expression被定义为%}<代码>{{blocker.parameters.expression}}代码>{%endif%}李>{%endfor%}<ul>
评论
迫不及待地想要使用这些改进:)
Alex Rock is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now