Прийняттярішеньзадопомогоюробочогопроцесу
Прийняттярішеньзадопомогоюробочогопроцесу
Наявністьстанудлямоделієдоситьпоширенимявищем。Станкоментарявизначаєтьсялишезасобомперевіркинаспам。Що,якщомидодамобільшефакторівприйняттярішень吗?
Миможемодозволитиадміністраторувеб-сайтумодерувативсікоментаріпісляперевіркинаспам。Цейпроцесбудевиглядатиприблизнотак:
- Почнемозістану
提交
,коликористувачвідправивкоментар; - Нехайзасібперевіркинаспампроаналізуєкоментаріперемкнестаннабудь-якийізнаступних:
potential_spam
,火腿
,або拒绝了
; - Якщоневідхилено、зачекаємопокиадміністраторвеб-сайтувирішить,чидостатньохорошийкоментар,перемкнувшистанна
发表
або拒绝了
。
Реалізаціяцієїлогікиненадтоскладна,алеможнауявити,щододаваннябільшоїкількостіправилзначнозбільшитьскладність。Замістьтогощобпрограмуватилогікусамостійно,миможемовикористовуватикомпонентSymfony工作流ob娱乐下载:
1
美元ob娱乐下载symfony作曲家申请工作流
Описробочихпроцесів
Робочийпроцескоментаряможебутиописанийуфайлі配置/包/ workflow.yaml
:
Дляперевіркиробочогопроцесузгенеруйтевізуальнепредставлення:
1
美元ob娱乐下载symfony控制台工作流:转储|点-Tpng - o workflow.png置评
请注意
Команда点
єчастиноюутилітиGraphviz。
Використанняробочогопроцесу
Замінітьпоточнулогікувобробникуповідомленьнанову,звикористаннямробочогопроцесу:
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 ()));+}}}
Новалогікавиглядаєнаступнимчином:
- Якщодлякоментаряуповідомленнідоступнийперехідустан
接受
,перевіряємоповідомленнянаспам; - Залежновідрезультату,вибираємоправильнийперехіддлязастосування;
- Викликаємо
应用()
,щобоновитикоментарзадопомогоювикликуметоду设置状态()
; - Викликаємо
冲洗()
,щобзафіксуватизмінивбазіданих; - Повторновідправляємоповідомлення,щобзапуститиробочийпроцесдлявизначеннянаступногопереходу。
Оскількиминереалізувалиперевіркуадміністратором,наступногоразу,колиповідомленнябудеопрацьовано,вжурналзапишеться“删除评论消息”。
Реалізуймоавтоматичнуперевіркудонаступногорозділу:
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 ()));}
Виконайтеob娱乐下载symfony服务器:日志
ідодайтекоментарнафронтенді,щобпобачитивсіпереходи,щовідбуваютьсяодинзаіншим。
Пошуксервісівізконтейнеравпровадженнязалежностей
Використовуючивпровадженнязалежностеймиотримуємосервісизконтейнеравпровадженнязалежностейзатипом,щовказуєнаінтерфейсчи,іноді,законкретниміменемкласуреалізації。Алеколиінтерфейсмаєкількареалізацій,Symfonob娱乐下载yнеможездогадатися,якасамевампотрібна。Нампотрібенспосіббутивідвертими。
МищойнонатрапилинатакийприкладзвпровадженнямWorkflowInterface
упопередньомурозділі。
Оскількимивпроваджуємобудь-якийекземпляруніверсальногоінтерфейсуWorkflowInterface
вконструктор,якSymob娱乐下载fonyможевгадати,якуреалізаціюробочогопроцесувикористовувати吗?ob娱乐下载Symfonyвикористовуєдомовленість,заснованунаіменіаргументу:commentStateMachine美元
відноситьсядоробочогопроцесу评论
вконфігурації(типякогоstate_machine
)。Спробуйтевикористовуватибудь-якеіншеім'яаргументуіцевикличепомилку。
Якщовинепам'ятаєтедомовленості,використовуйтекоманду调试:容器
。Пошуквсіхсервісів,щомістять“工作流”:
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>
Звернітьувагунавибір8
,ob娱乐下载Symfony \工作流组件\ \ WorkflowInterface commentStateMachine美元
якийповідомляє,щовикористанняcommentStateMachine美元
уякостііменіаргументумаєособливезначення。
请注意
Мимоглибвикористовуватикоманду调试:自动装配
,якпоказановпопередньомурозділі:
1
美元ob娱乐下载symfony控制台调试:自动装配工作流程
Йдемодалі
- Робочіпроцесиіскінченніавтоматитаколивибратикожногозних;
- ДокументаціяпоSyob娱乐下载mfony工作流。