Prendere decisioni反对联合国的工作流程
Prendere decisioni反对联合国的工作流程
Avere uno stato /联合国modello e abbastanza只有。Lo stato del commento e determinato独奏dallo垃圾邮件检查程序。E se aggiungessimo altri fattori隋定性prendere delle decisioni吗?
Potremmo在modo格瓦拉新航l 'amministratore del sito moderare合唱我commenti dopo il controllo dello垃圾邮件。Il全体的si tradurrebbe qualcosa di比喻:
- Iniziamo con l 'assegnare联合国国家档案馆
提交
quando联合国commento viene inviato da联合国utente; - Lasciamo切罗垃圾邮件检查程序analizzi il commento e modifichi瞧苏国家档案馆
potential_spam
,火腿
oppure拒绝了
; - Se il commento非viene rifiutato dallo垃圾邮件检查程序,aspettiamo格瓦拉新航l 'amministratore del sito decidere Se新航好o较少,modificando lo档案馆
发表
oppure拒绝了
。
L 'implementazione di, logica e abbastanza单纯地,ma年青一代si immaginare,所有'aumentare del期delle regole la complessita aumentera。Invece di codificare陈列stessi la logica possiamo usare il componente工作流di Symfony:ob娱乐下载
1
美元ob娱乐下载symfony作曲家申请工作流
Descrivere我工作流
Il工作流一些年青一代commenti essere descritto nel文件配置/包/ workflow.yaml
:
每convalidare il工作流,generiamo una rappresentazione visiva:
1
美元ob娱乐下载symfony控制台工作流:转储|点-Tpng - o workflow.png置评
请注意
Il第一点
足总部分戴尔'utilityGraphviz。
Utilizzare联合国工作流程
Sostituire la logica corrente nel gestore一些messaggi con il工作流:
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 ()));+}}}
La nuova logica e La seguente:
- Se la transizione
接受
e disponibile / il commento nel messaggio, controllare la presenza di垃圾邮件; - 一个自del risultato scegliere la transizione giusta da applicare;
- Chiamare
应用()
每aggiornare il commento tramite una chiamata metodo设置状态()
; - Chiamare
冲洗()
每salvare le modifiche nel数据库; - 每avviare Inviare nuovamente il messaggio la transizione del工作流。
Poiche非abbiamo implementato la validazione da杰克逊戴尔'amministratore, la prossima volta格瓦拉il messaggio sara consumato我们与否il seguente messaggio di日志:“删除评论消息”。
Implementiamo联合国'auto-validazione非诺艾尔prossimo capitolo:
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 ()));}
Eseguireob娱乐下载symfony服务器:日志
e aggiungere联合国commento nel前端/ vedere tutte le transizioni格瓦拉si susseguono una dopo l 'altra。
Trovare servizi nel依赖注入容器
Quando si utilizza la依赖注入,otteniamo servizi dal依赖注入容器attraverso类型提示il di联合国'interfaccia oppure alcune回attraverso il省di una架势格瓦拉rappresenta una implementazione concreta戴尔'interfaccia。马quando联合国'interfaccia ha稍di una implementazione concreta, Symfonob娱乐下载y年青一代非indovinare特质implementazione utilizzare。Abbiamo bisogno di联合国modo每essere espliciti。
Ci我们是appena imbattuti,所以nella sezione precedente,联合国esempio崔abbiamo iniettato l 'interfacciaWorkflowInterface
。
Sicome stiamo iniettando l 'interfaccia genericaWorkflowInterface
年青一代nel costruttore, Symfoob娱乐下载ny indovinare特质implementazione del工作流utilizzare吗?ob娱乐下载Symfony美国una convenzione basata南省戴尔'argomento:commentStateMachine美元
如果riferisce真主安拉variabile di configurazione del工作流评论
(il崔蒂波estate_machine
)。Provate反对联合国altro argomento e fallira。
Se非si ricorda la convezione usare第一调试:容器
。Cerchiamo合唱我servizi格瓦拉contengono“工作流”:
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>
如果noti la scelta8
,ob娱乐下载Symfony \工作流组件\ \ WorkflowInterface commentStateMachine美元
,小片切格瓦拉l 'uso dicommentStateMachine美元
来省di parametro ha联合国significato speciale。
请注意
Avremmo potuto usare第一调试:自动装配
在联合国visto capitolo precedente:
1
美元ob娱乐下载symfony控制台调试:自动装配工作流程
而oltre
- Documentazione苏e工作流状态机e quando scegliere una o l 'altra;
- Documentazione苏ob娱乐下载Symfony的工作流。