Podejmowanie decyzji przy użyciu komponentu工作流
Podejmowanie decyzji przy użyciu komponentu工作流
Modelowanie procesu咱pomocąmaszyny stanowej jest dośćpowszechne。斯坦komentarza jest określany tylko przez klasęsprawdzającą垃圾邮件。公司jeśli dodamy więcej czynnikow decyzyjnych吗?
Możemy pozwolićadministratorom strony moderowaćwszystkie komentarze阿宝sprawdzeniu spamu。过程十byłby czymśw rodzaju:
- Rozpocznij od stanu
提交
(wysłany) kiedy komentarz zostanie przesłany przez użytkownika; - Pozwol,赎kontroler spamu przeanalizowałkomentarz我przełączył斯坦na
potential_spam
(potencjalnie垃圾邮件),火腿
(聂垃圾邮件)、滑拒绝了
(odrzucono); - Jeśli聂zostanie odrzucony、poczekaj ażosoba administrująca stronązdecyduje, czy komentarz jest wystarczająco dobry, przełączając斯坦na
发表
滑拒绝了
。
Wdrożenie迪高schematu działania聂jest zbyt skomplikowane,啤酒można sobie wyobrazić,że dodanie większej liczby regułznacznie zwiększyłoby jego złożoność。Zamiast samodzielnie kodowaćschemat działania, możemy użyćkomponentu Syob娱乐下载mfony工作流:
1
美元ob娱乐下载symfony作曲家申请工作流
Opisywanie przepływow一家(ang。工作流)
Przepływ komentarzy można opisaćw pliku:配置/包/ workflow.yaml
偿sprawdzićpoprawnośćprzepływu一家,wygeneruj jego wizualnąreprezentację:
1
美元ob娱乐下载symfony控制台工作流:转储|点-Tpng - o workflow.png置评
请注意
Polecenie点
jest częściąnarzędziaGraphviz。
Korzystanie z przepływu一家高
Zastąp bieżący schemat obsługi komunikatow przepływem一家(ang。工作流程):
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 ()));+}}}
Nowy schemat działania wygląda następująco:
- Jeśli możliwe jest przejście oznaczone jako
接受
(zaakceptowano)国防后勤局komentarza w wiadomości (ang。消息)、sprawdźczy komentarz聂jest spamem; - W zależności od wyniku wybierz właściwądrogęprzepływu一家;
- 偿zaktualizowaćencję评论wywołaj metodę
应用()
。Spowoduje, wywołanie metody设置状态()
; - Wywołaj metodę
冲洗()
w celu zapisania zmian w bazie danych; - Ponownie wyślij wiadomość(ang。消息),赎umożliwićponowne przejście przepływu一家。
Ponieważ聂zaimplementowaliśmy walidacji przez osoby posiadające konto administracyjne, następnym razem, gdy wiadomośćzostanie przetworzona, zostanie zalogowana wiadomość”Zostawiono komentarz”。
Na razie zaimplementujmy automatycznąwalidację,ktorązmienimy w kolejnym rozdziale:
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 ()));}
Uruchomob娱乐下载symfony服务器:日志
我dodaj komentarz w aplikacji,赎zobaczyćwszystkie przejścia zachodzące jedno drugim。
Znajdowanie usług z kontenera wstrzykiwania zależności (ang。依赖注入容器)
Kiedy używamy wstrzykiwania zależności, pobieramy usługi z kontenera wstrzykiwania zależności używając podpowiadania typu (ang。类型提示)interfejsu滑konkretnej implementacji w formie nazwy klasy。Jednak, kiedy interfejs posiada wiele implementacji, ob娱乐下载Symfony聂może zgadnąć,ktorej konkretnie potrzebujesz。Musimy byćbardziej precyzyjni。
W poprzedniej sekcji spotkaliśmy sięjużz takim problemem W przypadku wstrzykiwaniaWorkflowInterface
。
Wstrzykując instancjęgenerycznego interfejsuWorkflowInterface
w konstruktorze, ob娱乐下载Symfony聂jest w stanie odgadnąć,ktorej implementacji przepływu一家(ang。użyć工作流)。ob娱乐下载Symfony używa konwencji bazującej na nazwie argumentu:commentStateMachine美元
,ktory odnosi się做przepływu一家评论
zdefiniowanego w konfiguracji (ktorego typem笑话state_machine
)。Jeżeli sprobujesz użyćjakiejkolwiek innej nazwy argumentu, zakończy sięniepowodzeniem。
Jeżeli聂pamiętasz jaka jest konwencja, użyj polecenia调试:容器
。Wyszukaj wszystkie usługi zawierające“工作流”:
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>
Zwroćuwagęna wybor o numerze8
- - - - - -ob娱乐下载Symfony \工作流组件\ \ WorkflowInterface commentStateMachine美元
,ktory mowi不结盟运动,że używaniecommentStateMachine美元
jako argumentu, posiada specjalne znaczenie。
请注意
Mogliśmy użyćpolecenia调试:自动装配
,木菠萝pokazano w poprzednim rozdziale:
1
美元ob娱乐下载symfony控制台调试:自动装配工作流程
Idąc dalej
- Przepływy一家我maszyny stanuoraz informacje kiedy我używać;
- Dokumentacja ob娱乐下载Symfony工作流。