Powiadamianie na wszystkie możliwe sposoby
Powiadamianie na wszystkie możliwe sposoby
Aplikacja księgi gości zbiera opinie na temat konferencji。啤酒聂jesteśmy najlepsi w przekazywaniu informacji zwrotnych naszym użytkownikom。
Ponieważkomentarze sąmoderowane,聂sąpublikowane natychmiast——啤酒我autorzy mogą迪高聂rozumieć。Mogliby nawet dodać我ponownie myśląc,że występująjakieśproblemy techniczne。Wyświetlenie im informacji zwrotnej阿宝zamieszczeniu komentarza, doskonały pomysł。
Prawdopodobnie powinniśmy rownieżpowiadomić我,gdy komentarz zostanie opublikowany。Prosiliśmy o这电子邮件,więc dajmy znać化生。
Istnieje wiele sposobow powiadamiania użytkownikow。电子邮件jest pierwszym介质,o ktorym możesz pomyśleć,啤酒możesz rownieżzastosowaćpowiadomienia w ramach naszej aplikacji。Możemy nawet pomyślećo wysyłaniu wiadomości SMS, wysyłaniu wiadomości na Slacku滑Telegramie。Istnieje wiele rożnych opcji。
Komponent ob娱乐下载Symfony通知implementuje wiele strategii wysyłania powiadomień。
Wysyłanie powiadomieńw przeglądarce
Pierwszym krokiem jest poinformowanie użytkownikow,że komentarze sąmoderowane bezpośrednio w przeglądarce阿宝我zgłoszeniu:
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
- - - / src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -15 6 + 15 8 @@使用Syob娱乐下载mfony \ HttpFoundation \ \组件文件\ \ FileException异常;使用Syob娱乐下载mfony \ HttpFoundation \ \组件请求;组件使用ob娱乐下载Symfony \ \ HttpFoundation \反应;使用Syob娱乐下载mfony \组件\ \ MessageBusInterface使者;+使用Syob娱乐下载mfony \组件\ \通知\通知通知;+使用Syob娱乐下载mfony \ \通知\ NotifierInterface组件;使用Syob娱乐下载mfony \组件\路由\注释\路线;类ConferenceController延伸AbstractController @@ -46年6 + 48岁,7美元@@类ConferenceController扩展AbstractController请求请求,会议会议上,美元CommentRepository CommentRepository美元,+ NotifierInterface通知美元,#【自动装配(% photo_dir %)]字符串photoDir美元,反应):{$评论=新的评论();@@ -74、9 + 77,15 @@类ConferenceController延伸AbstractController];$ this - >总线- >调度(新CommentMessage (- > getId()发表评论,美元上下文));+ $通知- >发送(新通知('谢谢你的反馈;你的评论将被审核后发布。”,(“浏览器”)));+返回$ this - > redirectToRoute(“会议”,(“鼻涕虫”= > $会议- > getSlug ()));}+如果($形式- > isSubmitted ()) {+ $通知- >发送(新通知(“你能检查你的提交吗?有一些问题。”,(“浏览器”)));+}+抵消美元= max(0, $请求- >查询- > getInt(“抵消”,0));$ paginator = $ commentRepository - > getCommentPaginator(会议,抵消美元);
通知人wysyła powiadomienie(ang。发送通知)odbiorcow(ang。接受者)咱pośrednictwemkanału(ang。通道)。
Powiadomienie zawiera temat, opcjonalnątreśćoraz priorytet。
Powiadomienie jest wysyłane na jednym滑wielu kanałach w zależności od jego priorytetu。Możesz wysyłaćpilne powiadomienia SMS-em滑zwykłym e-mailem。
国防后勤局powiadomieńw przeglądarce聂mamy odbiorcow。
Powiadomienie w przeglądarce wykorzystujewiadomości błyskawiczne(ang。flash消息)poprzez sekcjępowiadomień。偿我wyświetlić,musimy zaktualizowaćszablon konferencji:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
- - - /模板/会议/ show.html.twig+ + + b /模板/会议/ show.html.twig13 @@ @@ 3 6 + 3{%块标题%}会议留言板,{{会议}}{% endblock %}{%块体%}在app.flashes +{%为消息(“通知”)%}+ < div class = "警报alert-info alert-dismissible褪色秀”>+{{消息}}+ <按钮类型=“按钮”class =“btn-close data-bs-dismiss =“警报”aria-label = "关闭" > < span aria-hidden = " true " >报;< / span > < /按钮>+ < / div >+ {% endfor %}+< h2类= " mb-5 " > < / h2 >{{会议}}会议
Użytkownicy zostanąteraz powiadomieni,że我komentarz jest moderowany:
W ramach bonusu mamyładne powiadomienie na gorze strony, jeśli wystąpi błąd W formularzu:
提示
Wiadomości błyskawiczne (ang。flash消息)sąprzechowywane w ramach systemusesji HTTP。Głownąkonsekwencjątakiego rozwiązania开玩笑,że pamięćpodręczna HTTP musi byćwyłączona, ponieważ系统sesji musi zostaćuruchomiony,赎sprawdzaćwiadomości wyświetlenia。
Jest powod,国防后勤局ktorego dodaliśmy片段kodu wiadomości błyskawicznej (ang。flash消息)w szablonieshow.html.twig
、聂w bazowym ponieważutracilibyśmy kopięstrony głownej zapisanąw pamięci podręcznej przeglądarki。
Powiadamianie osob administrujących poprzez wiadomość电子邮件
Zamiast wysyłania poprzez wiadomości电子邮件MailerInterface
w celu powiadomienia osoby korzystającej z konta administracyjnego o wysłaniu komentarza, użyj komponentu通知做obsługi wiadomości:
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
推荐- - - - - - MessageHandler / src / / CommentMessageHandler.php+ + + MessageHandler b / src / / CommentMessageHandler.php@@ 4,15 + 4,15 @@名称空间应用\ MessageHandler;使用App \ ImageOptimizer;使用App \ \ CommentMessage消息;+使用App \ \ CommentReviewNotification通知;使用App \ Repository \ CommentRepository;使用App \ SpamChecker;使用原则\ ORM \ EntityManagerInterface;使用日志Psr \ \ LoggerInterface;桥用Symob娱乐下载fony \ \树枝\ Mime \ NotificationEmail;使用Syob娱乐下载mfony \ DependencyInjection \属性\ \组件自动装配;用Symfob娱乐下载ony \ \梅勒\ MailerInterface组件;使用Syob娱乐下载mfony \信使\ \组件属性\ AsMessageHandler;使用Syob娱乐下载mfony \组件\ \ MessageBusInterface使者;+使用Syob娱乐下载mfony \ \通知\ NotifierInterface组件;使用Syob娱乐下载mfony \工作流组件\ \ WorkflowInterface;# [AsMessageHandler] @@ -24, 8 + 24日7 @@类CommentMessageHandler私有CommentRepository CommentRepository美元,美元私人MessageBusInterface巴士,私人WorkflowInterface commentStateMachine美元,——美元私人MailerInterface梅勒,- #【自动装配(% admin_email %)]私人字符串adminEmail美元,+私人NotifierInterface通知美元,私人ImageOptimizer ImageOptimizer美元,#【自动装配(% photo_dir %)]私人字符串photoDir美元,私人? LoggerInterface $记录器= null, @@ -50年13 + 49岁7 @@类CommentMessageHandler $ this - > entityManager - >冲洗();$ this - >总线- >调度($消息);}elseif ($ this - > commentStateMachine - >(评论,美元“发布”)| | $ this - > commentStateMachine - >(评论美元,publish_ham)) {- $ this - >梅勒- >发送((新NotificationEmail ())- - - - - - - >主题(“新评论”)- - > htmlTemplate(邮件/ comment_notification.html.twig)- - > ($ this - > adminEmail)- - > ($ this - > adminEmail)- - - - - - - >上下文([“评论”= >评论美元])-);+ $ this - >通知- >发送(新CommentReviewNotification(评论美元),…$ this - >通知- > getAdminRecipients ());}elseif ($ this - > commentStateMachine - >(评论美元,“优化”)){如果($评论- > getPhotoFilename ()) {$ this - > imageOptimizer - >调整($ this - > photoDir‘/’。$评论- > getPhotoFilename ());
MetodagetAdminRecipients ()
zwraca adresy天鹅administracyjnych zgodnie z konfiguracjąkomponentu通知;zaktualizuj jąteraz,赎dodaćwłasny这电子邮件:
1 2 3 4 5 6 7 8
- - - / config /包/ notifier.yaml+ + + b / config /包/ notifier.yaml@@ -13 4 + 13 4 @@框架:媒介:['邮件']低:['邮件']admin_recipients:——{电子邮件:admin@example.com}+ -{电子邮件:“% env (string:默认值:default_admin_email: ADMIN_EMAIL) %”}
Teraz stworz klasęCommentReviewNotification
:
MetodaasEmailMessage ()
zEmailNotificationInterface
jest opcjonalna我pozwala na personalizacjęwiadomości电子邮件。
Jednąz korzyści płynących z zastosowania komponentu通知(zamiast komponentu梅勒)做wysyłania wiadomości邮件开玩笑,że oddziela powiadomienie od“kanału”wykorzystywanego做jego wysyłania。木菠萝możesz zobaczyć、nic聂mowi wprost,że powiadomienie powinno byćwysłane pocztąelektroniczną。
Zamiast迪高,kanałjest skonfigurowany w配置/包/ notifier.yaml
w zależności odznaczeniapowiadomienia (domyślnie低
):
Rozmawialiśmy o kanałach浏览器
我电子邮件
。Zobaczmy kilka innych, bardziej wyrafinowanych rozwiązań。
Rozmowy z administracją
Bądźmy szczerzy, wszyscy czekamy na pozytywne opinie albo przynajmniej na konstruktywnąkrytykę。Jeśli ktośumieści komentarz泽słowami takimi木菠萝滑“超级”、“świetnie”możemy chciećzaakceptować去szybciej niżinne。
W przypadku takich wiadomości chcemy byćpowiadamiani przez komunikator,塔基•木菠萝松滑电报、niezależnie od wiadomości电子邮件。
Zainstaluj wsparcie松弛国防后勤局Symfob娱乐下载ony通知:
1
美元ob娱乐下载symfony作曲家点播slack-notifier
偿rozpocząćskomponuj松弛DSN z tokenem dostępu我identyfikatorem kanału松弛,na ktorym chcesz wysyłaćwiadomości:松:/ / ACCESS_TOKEN@default ?通道=通道
。
Ponieważ牌dostępu jest danąwrażliwą,należy przechowywać松弛DSN w sejfie:
1
美元ob娱乐下载symfony控制台的秘密:集SLACK_DSN
Zrob,萨摩国防后勤局środowiska produkcyjnego:
1
美元ob娱乐下载symfony控制台的秘密:集SLACK_DSN - env =刺激
Włącz obsługęChattera w Slacku:
1 2 3 4 5 6 7 8 9 10 11 12
- - - / config /包/ notifier.yaml+ + + b / config /包/ notifier.yaml7 + 1,7 @@ @@ 1日框架:通知:- # chatter_transports:- #松弛:' % env (SLACK_DSN) % '+ chatter_transports:+松:“% env (SLACK_DSN) %”#电报:“% env (TELEGRAM_DSN) %”# texter_transports: #为什么twilio: ' % env (TWILIO_DSN) % '
Zaktualizuj klasępowiadomień,赎wiadomości były przekierowywane w zależności od treści komentarza (przy pomocy prostego wyrażenia regularnego):
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日
- - - / src /通知/ CommentReviewNotification.php+ + + b / src / / CommentReviewNotification.php通知@@ 7,6 + 7,7 @@使用Symob娱乐下载fony \组件\ \ EmailMessage通知\消息;组件使用ob娱乐下载Symfony \ \通知\ \ EmailNotificationInterface通知;使用Syob娱乐下载mfony \组件\ \通知\通知通知;使用Syob娱乐下载mfony \组件\通知\接受者\ EmailRecipientInterface;+使用Syob娱乐下载mfony \组件\通知\接受者\ RecipientInterface;类CommentReviewNotification扩展通知实现EmailNotificationInterface{@@ -26年4 + 27日15 @@类CommentReviewNotification扩展通知实现EmailNotificatio返回美元消息;}++公共职能getChannels (RecipientInterface接收美元):数组+ {+如果(preg_match (' {\ b(好棒|)\ b}我,$ this - >评论- > getText ())) {+返回(“电子邮件”,“聊天/松弛”);+}++ $ this - >重要性(通知::IMPORTANCE_LOW);++返回(“电子邮件”);+}}
Zmieniliśmy rownieżpriorytet normalnych komentarzy, ponieważnieznacznie poprawia, wygląd wiadomości电子邮件。
我gotowe !Wyślij komentarz zawierający słowo“awesome”一词,wiadomośćpowinna pojawićsięna Slacku。
Domyślne renderowanie wiadomości na Slacku teżmożesz nadpisać,podobnie木菠萝w przypadku poczty elektronicznej, jeśli zaimplementujeszChatNotificationInterface
。
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
- - - / src /通知/ CommentReviewNotification.php+ + + b / src / / CommentReviewNotification.php通知18 @@ @@ 3 13 + 3名称空间的应用程序\通知;使用App \实体\评论;+使用Syob娱乐下载mfony \桥组件\通知\ \松弛\ \ SlackDividerBlock块;+使用Syob娱乐下载mfony \桥组件\通知\ \松弛\ \ SlackSectionBlock块;+使用Syob娱乐下载mfony \桥组件\通知\ \松弛\ SlackOptions;+使用Syob娱乐下载mfony \组件\ \ ChatMessage通知\消息;使用Syob娱乐下载mfony \组件\ \ EmailMessage通知\消息;+使用Syob娱乐下载mfony \组件\通知\ \ ChatNotificationInterface通知;组件使用ob娱乐下载Symfony \ \通知\ \ EmailNotificationInterface通知;使用Syob娱乐下载mfony \组件\ \通知\通知通知;使用Syob娱乐下载mfony \组件\通知\接受者\ EmailRecipientInterface;使用Syob娱乐下载mfony \组件\通知\接受者\ RecipientInterface;海尔集团实现EmailNotificationInterface CommentReviewNotification扩展了通知+类CommentReviewNotification扩展通知实现EmailNotificationInterface, ChatNotificationInterface{公共职能__construct(私人评论评论,美元@@ -28年6 + 33岁28 @@类CommentReviewNotification扩展通知实现EmailNotificatio返回美元消息;}+公共职能asChatMessage (RecipientInterface接收美元,字符串$运输= null): ? ChatMessage+ {+如果(“松弛”! = =运输美元){+返回null;+}++ $消息= ChatMessage: fromNotification(这一点,接受美元,美元运输);+ $消息- >主题($ this - > getSubject ());新SlackOptions + $消息- >选项((())+ - > iconEmoji(“大作”)+ - > iconUrl (“https://guestbook.example.com”)+ - >用户名(“留言板”)+ - >块((新SlackSectionBlock()) - >文本($ this - > getSubject ()))+ - >块(新SlackDividerBlock ())新SlackSectionBlock + - >块((())+ - >文本(sprintf (' % s (% s)说:% s的,$ this - >评论- > getAuthor (), $ this - >评论- > getEmail (), $ this - >评论- > getText ()))+)+);++返回美元消息;+}+公共函数getChannels (RecipientInterface接收美元):数组{如果(preg_match (“{\ b(好棒|)\ b}我,$ this - >评论- > getText ())) {
Jest dobrze,啤酒może byćjeszcze lepiej。Czy聂byłoby wspaniale商务部zaakceptować滑odrzucićkomentarz bezpośrednio泽Slacka吗?
Zmieńpowiadomienie w塔基•sposob,赎przyjmowało这recenzji我dodaj dwa przyciski w wiadomości na Slacku:
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
- - - / src /通知/ CommentReviewNotification.php+ + + b / src / / CommentReviewNotification.php通知@@ 3、6 + 3、7 @@名称空间的应用程序\通知;使用App \实体\评论;+使用Syob娱乐下载mfony \桥组件\通知\ \松弛\ \ SlackActionsBlock块;桥组件使ob娱乐下载用Symfony \ \通知\ \松弛\ \ SlackDividerBlock块;桥组件使ob娱乐下载用Symfony \ \通知\ \松弛\ \ SlackSectionBlock块;使用Syob娱乐下载mfony \桥组件\通知\ \松弛\ SlackOptions;@@ -18、6 + 19日7 @@类CommentReviewNotification扩展通知实现EmailNotificatio{公共职能__construct(私人评论评论,美元+私人字符串reviewUrl美元,){父:__construct(“新评论”);6 + 52}@@ -50年,10 @@类CommentReviewNotification扩展通知实现EmailNotificatio - >块((新SlackSectionBlock()) - >文本(sprintf (“% s (% s)说:% s的,$ this - >评论- > getAuthor (), $ this - >评论- > getEmail (), $ this - >评论- > getText ())))新SlackActionsBlock + - >块((())+ - >按钮(“接受”,$ this - > reviewUrl,“主要”)+ - >按钮(“拒绝”,$ this - > reviewUrl。”?拒绝= 1”、“危险”)+));返回美元消息;
Teraz musimy zaktualizowaćpoprzednio wykonane zmiany。Najpierw zmodyfikuj obsługęwiadomości,赎przekazać这recenzji:
1 2 3 4 5 6 7 8 9 10 11 12
推荐- - - - - - MessageHandler / src / / CommentMessageHandler.php+ + + MessageHandler b / src / / CommentMessageHandler.php@@ -49 7 + 49 8 @@类CommentMessageHandler $ this - > entityManager - >冲洗();$ this - >总线- >调度($消息);}elseif ($ this - > commentStateMachine - >(评论,美元“发布”)| | $ this - > commentStateMachine - >(评论美元,publish_ham)) {- $ this - >通知- >发送(新CommentReviewNotification(评论美元),…$ this - >通知- > getAdminRecipients ());+ $ = new CommentReviewNotification通知(评论,美元消息- > getReviewUrl ());+ $ this - >通知- >发送(通知、美元…$ this - >通知- > getAdminRecipients ());}elseif ($ this - > commentStateMachine - >(评论美元,“优化”)){如果($评论- > getPhotoFilename ()) {$ this - > imageOptimizer - >调整($ this - > photoDir‘/’。$评论- > getPhotoFilename ());
木菠萝widać这URL recenzji powinien byćczęściąwiadomości z komentarzem dodajmy teraz:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
- - - / src /信息/ CommentMessage.php+ + + b / src /信息/ CommentMessage.php@@ 6、10 + 6、16 @@类CommentMessage{公共函数__construct(私人int id,美元+私人字符串reviewUrl美元,私人数组$上下文= []){}+公共职能getReviewUrl():字符串+ {+ $ this - > reviewUrl返回;+}+公共函数getId (): int{返回$ this - > id;
Na koniec zaktualizuj kontrolery,赎wygenerować这recenzji,我przekażw konstruktorze wiadomości z komentarzem:
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
- - - / src /控制器/ AdminController.php+ + + b / src /控制器/ AdminController.php@@ -12 6 + 12 7 @@使用Syob娱乐下载mfony \组件\ HttpKernel \ HttpCache \ StoreInterface;使用Syob娱乐下载mfony \ \ HttpKernel \ KernelInterface组件;使用Syob娱乐下载mfony \组件\ \ MessageBusInterface使者;使用Syob娱乐下载mfony \组件\路由\注释\路线;+使用Syob娱乐下载mfony \组件\ \发电机\ UrlGeneratorInterface路由;使用Syob娱乐下载mfony \工作流组件\ \ WorkflowInterface;用树枝\环境;@@ -42 43 7 + 8 @@类AdminController延伸AbstractController $ this - > entityManager - >冲洗();如果(接受美元){总线- $ this - > - >调度(新CommentMessage($评论- > getId ()));+ $ reviewUrl = $ this - > generateUrl (“review_comment”, (“id”= > $评论- > getId ()], UrlGeneratorInterface:: ABSOLUTE_URL);+ $ this - >总线- >调度(新CommentMessage(评论- > getId (), reviewUrl美元));}返回新的反应($ this - >树枝>渲染(“admin / review.html。嫩枝”,(- - - / src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -18 6 + 18 7 @@使用Syob娱乐下载mfony \组件\ \ MessageBusInterface使者;使用Syob娱乐下载mfony \组件\ \通知\通知通知;使用Syob娱乐下载mfony \ \通知\ NotifierInterface组件;使用Syob娱乐下载mfony \组件\路由\注释\路线;+使用Syob娱乐下载mfony \组件\ \发电机\ UrlGeneratorInterface路由;类ConferenceController延伸AbstractController{@@ -75、7 + 76、8 @@类ConferenceController延伸AbstractController“推荐人”= >请求- >标题- >获取美元(“推荐人”)、“永久链接”= > $请求- > getUri ()];总线- $ this - > - >调度(新CommentMessage (- > getId()发表评论,美元上下文));+ $ reviewUrl = $ this - > generateUrl (“review_comment”, (“id”= > $评论- > getId ()], UrlGeneratorInterface:: ABSOLUTE_URL);+ $ this - >总线- >调度(新CommentMessage(评论- > getId (), reviewUrl美元,美元上下文));$通知- >发送(新通知('谢谢你的反馈;你的评论将被审核后发布。”,(“浏览器”)));
Oddzielenie kodu oznacza zmiany w większej liczbie miejsc,啤酒ułatwia jego testowanie, zrozumienie我ponowne użycie。
Sprobuj jeszcze拉兹,wiadomośćpowinna byćteraz w dobrej formie:
Asynchronicznośćw obrębie tablicy
Powiadomienia sądomyślnie wysyłane asynchronicznie, podobnie木菠萝e-maile:
Gdybyśmy mieli wyłączyćwiadomości asynchroniczne, mielibyśmy mały问题。Z każdym dodanym komentarzem otrzymujemy wiadomość电子邮件我wiadomośćna Slacku。Jeśli wystąpi błąd przy wysyłaniu wiadomości na Slacku (błędny identyfikator kanału, błędny令牌…),信使będzie probowałponowićwysyłkętrzy razy zanim zostanie ona odrzucona。啤酒ponieważwiadomość邮件zostanie wysłana jako pierwsza, otrzymamy trzy wiadomości电子邮件我żadnych wiadomości na Slacku。
Kiedy wszystkie operacje sąasynchroniczne, komunikaty stająsięniezależne。Wiadomości SMS sąjużskonfigurowane jako asynchroniczne na wypadek, gdybyśchciałotrzymywaćpowiadomienia na swoim telefonie。
Powiadamianie użytkownikow咱pomocąpoczty elektronicznej
Ostatnim zadaniem jest powiadomienie użytkownikow o zatwierdzeniu我komentarza。Pozwol,że pozostawięimplementacjęTobie。
Idąc dalej