前置决策与工作流程
前置决策与工作流程
我的爱人è我的爱人。Lo stato del commento è determinato solo dallo垃圾邮件检查器。你有什么不愉快的事吗?
Potremmo fare in modo che sia l' amaterore del sito a moderare tutti i commenti dopo il controllo dello spam。Il tutto si tradurrebbe in qualcosa di simile:
- Iniziamo con l'assegnare un stato
提交
联合国对联合国的评价; - Lasciamo che lo spam检查器analizzi il commento modifichi lo stato su
potential_spam
,火腿
oppure拒绝了
; - 这是我的意见,我的意见,我的意见,我的意见,我的意见,我的意见
发表
oppure拒绝了
.
逻辑问题的实现è有道理的人生può想象的一切,与现实有关的一切complessità aumenterà。对逻辑的编码和分析,对逻辑的组成流程的分析:ob娱乐下载
1
$ob娱乐下载Symfony作曲家要求工作流
描述工作流程
Il workflow dei commenti può essere descripitto nel文件配置/包/ workflow.yaml
:
根据convalidare il工作流,generiamo una rappresentazione visiva:
1
$ob娱乐下载symfony控制台工作流:dump comment | dot - tng -o workflow.png
请注意
Il第一点
部分戴尔效用Graphviz.
利用un工作流
sotituire la logica corrente nel gestore dei messaggi con il工作流程:
12 34 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
——MessageHandler / src / / CommentMessageHandler.php+ + + MessageHandler b / src / / CommentMessageHandler.php@@ -6,7 +6,10 @@使用App\Message\CommentMessage;使用App \ Repository \ CommentRepository;使用App \ SpamChecker;使用原则\ ORM \ EntityManagerInterface;+使用Psr \ Log \ LoggerInterface;使用Syob娱乐下载mfony \信使\ \组件属性\ AsMessageHandler;+使用Syob娱乐下载mfony \组件\ \ MessageBusInterface使者;+使用Syob娱乐下载mfony \工作流组件\ \ WorkflowInterface;#[AsMessageHandler] class CommentMessageHandler @@ -15,6 +18,9 @@ class CommentMessageHandler private EntityManagerInterface $entityManager, private SpamChecker $ SpamChecker, private CommentRepository $ CommentRepository,+ private MessageBusInterface$commentStateMachinelogggerinterface $logger = null,){} @@ -25,12 +31,18 @@类CommentMessageHandler返回;}- if (2 === $this->spamChecker->getSpamScore($comment, $message->getContext())) {——评论- >设置状态(“垃圾邮件”);-}其他{——评论- >设置状态(“发表”);+ if ($this->commentStateMachine->can($comment, 'accept')) {+ $score = $this->spamChecker->getSpamScore($comment, $message->getContext());+ $transition = match ($score) {+ 2 => 'reject_spam',+ 1 => '可能是垃圾邮件',+ default => 'accept',+};+ $this->commentStateMachine->apply($comment, $transition);+ $ this - > entityManager - >冲洗();+ $ this - >总线- >调度($消息);+} elseif ($this->记录器){+ $this->logger->debug('删除评论消息',['comment' => $comment->getId(), 'state' => $comment->getState()]);}-- $ this - > entityManager - >冲洗();}}
La nuova logica è La seguente:
- Se la transizione
接受
è在我的评论中,我的信息被控制了; - 第二阶段的发展,应用的转型;
- Chiamare
应用()
每个aggiornare il commento tramite una chiamata al metodo设置状态()
; - Chiamare
冲洗()
每打捞修改数据库; - 以工作流程为基础的信息革新。
Poiché non abbiamo implementato la validazione da parte dell'amministratore, la prosima volta che il messaggio sarà consumato, verrà generato il seguente messaggio di log:“删除评论消息”。
自动验证程序:
12 3 4 5 6 7 8 9 10 11 12
——MessageHandler / src / / CommentMessageHandler.php+ + + MessageHandler b / src / / CommentMessageHandler.php@@ -41,6 +41,9 @@ class CommentMessageHandler $this->commentStateMachine->apply($comment, $transition);$ this - > entityManager >冲洗();$ this - >总线- >调度($消息);+} elseif ($this->commentStateMachine->can($comment, 'publish') || $this->commentStateMachine->can($comment, 'publish_ham')) {+ $this->commentStateMachine->apply($comment, $this->commentStateMachine->can($comment, 'publish') ?'publish': 'publish_ham');+ $ this - > entityManager - >冲洗();} elseif ($this->logger) {$this->logger->debug('删除评论消息',['comment' => $comment->getId(), 'state' => $comment->getState()]);}
Eseguireob娱乐下载symfony服务器:日志
E aggiungere,联合国的评论,在前面,在过渡的道路上,在后面的道路上。
依赖注入容器
Quando si utizza la依赖注入,otteniamo i servizi dal依赖注入容器吸引类型暗示di un' interface, oppure alcune volte吸引verso il nome di una class che rappresenta una implementazione concreta dell' interface。Ma quando un'interfaccia ha più di una implementazione concreta, ob娱乐下载Symfony non può indovinare quale implementazione utilizzare。阿比阿摩比阿摩比阿摩比阿摩比阿摩比阿摩比阿摩比阿摩比阿摩比阿摩比阿摩比阿摩比阿
在你的面前,在你的面前,在你的面前,在你的面前WorkflowInterface
.
Sicome stiamo iniettando l'interfaccia genericaWorkflowInterface
nel costruttore,来può Symfoob娱乐下载ny indovinare qualale implementazione del workflow utilizzare?ob娱乐下载美国巴萨塔南部诺姆戴尔阿戈门托集会:commentStateMachine美元
Si riferisce真主安拉变量di配置del工作流评论
(il cui tipo èstate_machine
).我的观点是正确的fallirà。
我不知道我在做什么,我在做什么调试:容器
.Cerchiamo tutti i servizi che contengono "工作流"
12 3 4 5 6 7 8 9 10 11 12 13 14
$ob娱乐下载symfony console debug:container workflow选择以下服务之一显示其信息:[0]console.command.workflow_dump [1] workflow。摘要[2]工作流。marking_store。方法[3]工作流。注册表[4]workflow.security。Expression_language[5]工作流。[7] Symfony\Component\Workflow\Registry [8] Symob娱乐下载fony\Component\Workflow\WorkflowInterface$commentStateMachine[9] Psr \ \ LoggerInterface日志$workflowLogger>
我没有孤独8
,ob娱乐下载Symfony \工作流组件\ \ WorkflowInterface commentStateMachine美元
, che dice che l’uso dicommentStateMachine美元
Come Nome di parametro ha UN significant ato speciale。
请注意
你是我的战友调试:自动装配
来看看联合国的先例:
1
$ob娱乐下载Symfony控制台调试:自动装配工作流
而oltre
- Documentazione苏工作流状态机E quando scegliere una o l'altra;
- Documentazione苏ob娱乐下载Symfony的工作流.