Beslissingen nemen门middel van甚至工作流

Beslissingen nemen门middel van甚至工作流

Het hebben van甚至国家voor vrij gebruikelijk甚至模型。van De状态甚至中wordt活化alleen bepaald门德垃圾邮件检查程序。窟als我们米尔beslissingsfactoren toevoegen吗?

我们甚至willen websitebeheerder misschien逢de reacties变迟modereren, na het checken op垃圾邮件。Het过程邹er丹als volgt外的虽然早:

  • 我们beginnen见面甚至提交州wanneer甚至中wordt活化ingediend门甚至gebruiker;
  • Laat de spamchecker de om naar中analyseren en zet de活化状态potential_spam,火腿拒绝了;
  • 印度不行afgewezen, wacht丹合计de websitebeheerder beslist de中去活化genoeg门德国家op发表拒绝了te zetten。

Het implementeren van deze logica不行阿尔忒复杂,低平火山口我菅直人我voorstellen dat Het toevoegen范米尔regels de complexiteit aanzienlijk菅直人vergroten。在plaats van zelf de logica te coderen kunnen我们het Symfoob娱乐下载ny Workflow-component gebruiken:

1
美元ob娱乐下载symfony作曲家申请工作流

工作流beschrijven

het De reactie-workflow菅直人配置/包/ workflow.yamlbestand沃顿beschreven:

配置/包/ workflow.yaml
1 2 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 32 33 34 35 36 37 38 39 40 41
框架:工作流程:备注:类型:state_machineaudit_trail:启用:“% kernel.debug %”marking_store:类型:“方法”属性:“状态”支持:- - - - - -应用实体\ \发表评论initial_marking:提交地方:- - - - - -提交- - - - - -火腿- - - - - -potential_spam- - - - - -垃圾邮件- - - - - -拒绝了- - - - - -发表转换:接受:来自:提交:火腿might_be_spam:来自:提交:potential_spamreject_spam:来自:提交:垃圾邮件发布:来自:potential_spam:发表拒绝:来自:potential_spam:拒绝了publish_ham:来自:火腿:发表reject_ham:来自:火腿:拒绝了

Om de工作流te valideren genereer我甚至visuele weergave:

1
美元ob娱乐下载symfony控制台工作流:转储|点-Tpng - o workflow.png置评

请注意

Het命令甚至onderdeel van deGraphviz实用程序。

即使工作流gebruiken

Vervang de huidige logica de请门德工作流程:

1 2 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
推荐- - - - - - MessageHandler / src / / CommentMessageHandler.php+ + + MessageHandler b / src / / CommentMessageHandler.php19 + 6 @@ 6日,28日@@使用App \ \ CommentMessage消息;使用App \ Repository \ CommentRepository;使用App \ SpamChecker;使用原则\ ORM \ EntityManagerInterface;+使用Psr \ Log \ LoggerInterface;使用Syob娱乐下载mfony \信使\ \组件处理程序\ MessageHandlerInterface;+使用Syob娱乐下载mfony \组件\ \ MessageBusInterface使者;+使用Syob娱乐下载mfony \工作流组件\ \ WorkflowInterface;类CommentMessageHandler实现MessageHandlerInterface{私人spamChecker美元;私人entityManager美元;私人commentRepository美元;美元+私人公交;+私人美元工作流;+私人美元记录器;公共函数__construct (EntityManagerInterface entityManager美元,SpamChecker SpamChecker美元,CommentRepository CommentRepository美元)+公共职能__construct (EntityManagerInterface entityManager美元,SpamChecker SpamChecker美元,CommentRepository CommentRepository美元,美元MessageBusInterface巴士,WorkflowInterface commentStateMachine美元,美元LoggerInterface记录器= null){$ this - > entityManager = $ entityManager;$ this - > spamChecker = $ spamChecker;$ this - > commentRepository = $ commentRepository;+ $ this - >总线= $总线;= $ + $ this - >工作流commentStateMachine;+ $ this - >日志记录器= $记录器;}公共职能__invoke (CommentMessage消息)美元@@ -28年12 + 37岁21 @@类CommentMessageHandler实现MessageHandlerInterface返回;}——如果(2 = = = $ this - > spamChecker - > getSpamScore(评论,美元消息- > getContext ())) {- $评论- >设置状态(“垃圾邮件”);-其他}{- $评论- >设置状态(“发表”);- - - - - -}- $ this - > entityManager - >冲洗();+如果($ this - >工作流- >(评论美元,“接受”)){+ $得分= $ this - > spamChecker - > getSpamScore(评论,美元消息- > getContext ());+ $过渡=“接受”;如果得分(2 = = = $ +){+ $过渡=“reject_spam”;+}elseif(1美元= = =分数){+ $过渡=“might_be_spam”;+}+ $ this - >工作流- >应用(评论,美元过渡);+ $ this - > entityManager - >冲洗();++ $ this - >总线- >调度($消息);+}elseif ($ this - >日志记录器){+ $ this - >日志- >调试(“删除评论消息”,(“评论”= > $评论- > getId(),“国家”= > $评论- > getState ()));+}}}

De nieuwe logica luidt als volgt:

  • Als德接受-overgang beschikbaar voor德中在het bericht活化,controleer丹op垃圾邮件;
  • 黄铁矿、afhankelijk van de uitkomst de juiste overgang om脚趾te passen;
  • Roep应用()河畔,om de中bij活化te通过即使aanroep op德威尔设置状态()方法;
  • Roep冲洗()河畔om de wijzigingen de数据库中大量te leggen;
  • Verstuur het bericht opnieuw om opnieuw脚趾te passen de工作流。

Aangezien我们de adminvalidatie不行hebben geimplementeerd zal de volgende科尔dat het bericht wordt verwerkt,沃顿gelogd“删除评论消息”。

变迟我们甚至automatische validatie implementeren河畔合计het volgende hoofdstuk:

1 2 3 4 5 6 7 8 9 10 11 12
推荐- - - - - - MessageHandler / src / / CommentMessageHandler.php+ + + MessageHandler b / src / / CommentMessageHandler.php@@ -50 50 6 + 9 @@类CommentMessageHandler实现MessageHandlerInterface $ this - > entityManager - >冲洗();$ this - >总线- >调度($消息);+}elseif ($ this - >工作流- >(评论,美元“发布”)| | $ this - >工作流- >(评论美元,publish_ham)) {+ $ this - >工作流- >应用(评论,美元$ this - >工作流- >(评论美元,“出版”)?“发布”:“publish_ham”);+ $ this - > entityManager - >冲洗();}elseif ($ this - >日志记录器){$ this - >日志- >调试(“删除评论消息”,(“评论”= > $评论- > getId(),“国家”= > $评论- > getState ()));}

Draaiob娱乐下载symfony服务器:日志en voeg甚至中脚趾在活化de前端om阿莱overgangen 8 elkaar te虽然gebeuren。

服务zoeken de依赖注入容器

Bij het gebruik van依赖注入krijgen我们服务van de依赖注入容器门索姆甚至混凝土implementatie-class-naam te typen甚至接口。低平火山口als甚至接口meerdere implementaties heeft,菅直人Symfony不行radeob娱乐下载n维尔克jij nodig hebt。我们hebben甚至许多nodig om expliciet te zijn。

我们zijn zojuist佐薇’voorbeeld tegengekomen遇到de injectie van甚至“WorkflowInterface”de vorige paragraaf。

锄头菅直人Symob娱乐下载fony raden维尔克工作流implementatie酩悦沃顿gebruikt aangezien我们甚至exemplaar van de generiekeWorkflowInterface接口在构造函数de injecteren吗?ob娱乐下载Symfony gebruikt甚至conventie gebaseerd op de argumentnaam:commentStateMachine美元verwijst naar德评论工作流在de configuratie(死van het类型state_machine)。Wanneer我甚至安德利果汁argumentnaam probeert zal说mislukken。

Als我德conventie不行米尔知道,gebruik丹het突击队调试:容器。Zoek naar阿莱服务满足“工作流”:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
美元ob娱乐下载symfony控制台调试:工作流容器选择以下服务来显示其信息之一:[0]console.command.workflow_dump[1]工作流。摘要[2]workflow.marking_store。方法[3]工作流。注册表[4]workflow.security。expression_language[5]工作流。twig_extension [6] monolog.logger。工作流[7]Symfonyob娱乐下载 \工作流组件\ \注册[8]Symfony \组件\ \ WorkflowInterface工作流美元commentStateMachine[9]Psr \ \ LoggerInterface日志美元workflowLogger>

让op keuze8,ob娱乐下载Symfony \工作流组件\ \ WorkflowInterface commentStateMachine美元死我vertelt dat het gebruik范commentStateMachine美元als argumentnaam甚至speciale betekenis heeft。

请注意

我们哈登het突击队调试:自动装配kunnen gebruiken, zoals我们甚至vorig hoofdstuk hebben gezien:

1
美元ob娱乐下载symfony控制台调试:自动装配工作流程
这项工作,包括代码示例,许可下Creative Commons BY-NC-SA 4.0许可证。