Notifiche每合唱
Notifiche每合唱
L 'applicazione留言板raccoglie我反馈sulle conferenze。马不我们是bravi敢反馈ai nostri utenti。
索诺Poiche我commenti moderati, probabilmente gli utenti非capiranno鲈鱼我洛commenti非vengono pubblicati immediatamente。Potrebbero传递re-inviarli pensando格瓦拉ci siano stati一些problemi等。敢洛联合国反馈dopo断言inviato联合国commento sarebbe可笑的怪人。
Inoltre, probabilmente dovremmo远洛sapere quando il commento e stato pubblicato。Chiediamo拉洛电子邮件、篇faremmo usarla meglio广告。
Ci园子molti莫迪每notificare gli utenti。L 'e-mail e il大哥中央一个崔si potrebbe pensare,马e传递相信inviare notifiche内尔'applicazione网络。Potremmo传递pensare di inviare messaggi SMS, postare联合国messaggio苏松弛o电报。Ci园子molte opzioni。
Il componente通知di Symfony并ob娱乐下载di notifica molte策略。
Invio di notifiche tramite浏览器
初来的航道,notifichiamo direttamente nel浏览器agli utenti切我commenti园子moderati dopo il洛invio:
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
- - - / src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -14 6 + 14 8 @@使用Syob娱乐下载mfony \ HttpFoundation \ \组件文件\ \ FileException异常;使用Syob娱乐下载mfony \ HttpFoundation \ \组件请求;组件使用ob娱乐下载Symfony \ \ HttpFoundation \反应;使用Syob娱乐下载mfony \组件\ \ MessageBusInterface使者;+使用Syob娱乐下载mfony \组件\ \通知\通知通知;+使用Syob娱乐下载mfony \ \通知\ NotifierInterface组件;使用Syob娱乐下载mfony \组件\路由\注释\路线;用树枝\环境;@@ -53 55 7 + 7 @@类ConferenceController延伸AbstractController} #(路线(“/会议/{蛞蝓}”,名字:“会议”))公共函数显示(请求美元请求、会议会议上,美元CommentRepository CommentRepository美元,字符串photoDir美元):反应+公共函数显示(请求美元请求、会议会议上,美元CommentRepository CommentRepository美元,美元NotifierInterface通知,字符串photoDir美元):反应{$评论=新的评论();$ = $ this - > createForm形式(CommentFormType::类,评论美元);@@ -82、9 + 84,15 @@类ConferenceController延伸AbstractController $ this - >总线- >调度(新CommentMessage (- > getId()发表评论,美元上下文));+ $通知- >发送(新通知('谢谢你的反馈;你的评论将被审核后发布。”,(“浏览器”)));+返回$ this - > redirectToRoute(“会议”,(“鼻涕虫”= > $会议- > getSlug ()));}+如果($形式- > isSubmitted ()) {+ $通知- >发送(新通知(“你能检查你的提交吗?有一些问题。”,(“浏览器”)));+}+抵消美元= max(0, $请求- >查询- > getInt(“抵消”,0));$ paginator = $ commentRepository - > getCommentPaginator(会议,抵消美元);
Il notificatoreinviaunanotifica人工智能destinatariattraverso联合国canale。
Una notifica ha联合国oggetto联合国contenuto facoltativo联合国'importanza e。
阿苏Una notifica viene inviata uno稍canali德拉自安和苏阿importanza。通过短信E E相信inviare notifiche urgenti notifiche regolari,广告esempio,通过电子邮件。
每le notifiche nel浏览器,非abbiamo destinatari。
La notifica utilizza nel浏览器messaggi闪光tramite la sezionenotifiche。德拉conferenza Dobbiamo visualizzarli aggiornando il模板:
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 >{{会议}}会议
Gli utenti saranno ora informati格瓦拉l 'invio di commenti e中板的:
奖金aggiuntivo, abbiamo una贝拉notifica所以nella杰克逊superiore在卡索德尔sito di errori nel形式:
提示
我messaggi Flash utilizzano sistema disessione HTTPsupporto di memorizzazione来。La conseguenza眼光e格瓦拉La缓存HTTP e disabilitata quanto il sistema di sessione deve essere avviato每controllare La presenza di messaggi。
崔Questo e il motivo每abbiamo aggiunto lo片段一些messaggi flash nel模板show.html.twig
e非quello di基地,每非perdere la缓存HTTP / la主页。
Notificare gli amministratori通过电子邮件
Invece di avvisare l 'amministratore格瓦拉联合国commento e stato appena pubblicato, attraversoMailerInterface
,usiamo componente通知内尔'handler一些messaggi:
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.php@@ 4、14 + 4、14 @@名称空间应用\ MessageHandler;使用App \ ImageOptimizer;使用App \ \ CommentMessage消息;+使用App \ \ CommentReviewNotification通知;使用App \ Repository \ CommentRepository;使用App \ SpamChecker;使用原则\ ORM \ EntityManagerInterface;使用日志Psr \ \ LoggerInterface;桥用Symob娱乐下载fony \ \树枝\ Mime \ NotificationEmail;用Symfob娱乐下载ony \ \梅勒\ MailerInterface组件;使用Syob娱乐下载mfony \信使\ \组件处理程序\ MessageHandlerInterface;使用Syob娱乐下载mfony \组件\ \ MessageBusInterface使者;+使用Syob娱乐下载mfony \ \通知\ NotifierInterface组件;使用Syob娱乐下载mfony \工作流组件\ \ WorkflowInterface;类CommentMessageHandler实现MessageHandlerInterface @@ -21, 22 + 21日20 @@类CommentMessageHandler实现MessageHandlerInterface私人commentRepository美元;私人美元总线;私人美元工作流;——私人美元梅勒;+私人美元通知;私人imageOptimizer美元;——私人adminEmail美元;私人photoDir美元;私人美元记录器;公共函数__construct (EntityManagerInterface entityManager美元,SpamChecker SpamChecker美元,CommentRepository CommentRepository美元,美元MessageBusInterface巴士,WorkflowInterface commentStateMachine美元,美元MailerInterface梅勒,ImageOptimizer ImageOptimizer美元,字符串adminEmail美元,字符串photoDir美元,美元LoggerInterface记录器= null)+公共职能__construct (EntityManagerInterface entityManager美元,SpamChecker SpamChecker美元,CommentRepository CommentRepository美元,美元MessageBusInterface巴士,WorkflowInterface commentStateMachine美元,美元NotifierInterface通知,ImageOptimizer ImageOptimizer美元,字符串photoDir美元,美元LoggerInterface记录器= null){$ this - > entityManager = $ entityManager;$ this - > spamChecker = $ spamChecker;$ this - > commentRepository = $ commentRepository;$ this - >总线= $总线;= $ $ this - >工作流commentStateMachine;- $ this - >梅勒= $梅勒;+ $ this - >通知= $通知;$ this - > imageOptimizer = $ imageOptimizer;- $ this - > adminEmail = $ adminEmail;$ this - > photoDir = $ photoDir;$ this - >日志记录器= $记录器;}@@ -62 13 + 60 7 @@类CommentMessageHandler实现MessageHandlerInterface $ this - >总线- >调度($消息);}elseif ($ this - >工作流- >(评论,美元“发布”)| | $ this - >工作流- >(评论美元,publish_ham)) {- $ this - >梅勒- >发送((新NotificationEmail ())- - - - - - - >主题(“新评论”)- - > htmlTemplate(邮件/ comment_notification.html.twig)- - > ($ this - > adminEmail)- - > ($ this - > adminEmail)- - - - - - - >上下文([“评论”= >评论美元])-);+ $ this - >通知- >发送(新CommentReviewNotification(评论美元),…$ this - >通知- > getAdminRecipients ());}elseif ($ this - >工作流- >(评论美元,“优化”)){如果($评论- > getPhotoFilename ()) {$ this - > imageOptimizer - >调整($ this - > photoDir‘/’。$评论- > getPhotoFilename ());
Il metodogetAdminRecipients ()
restituisce我destinatari“amministratori”configurato内尔impostazioni del通知;每aggiungere aggiorniamolo ora il我方indirizzo电子邮件:
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) %”}
奥拉,creiamo架势CommentReviewNotification
:
Il metodoasEmailMessage ()
,definito内尔'interfacciaEmailNotificationInterface
e opzionale,让马能di personalizzare l 'email。
Uno一些vantaggi内尔'utilizzo del通知al posto餐馆德尔·梅勒每inviare电子邮件、e la separazione交易notifica e il utilizzato / inviarla“塔”。来possiamo vedere,木棒骰子esplicitamente格瓦拉la notifica deve essere inviata通过电子邮件。
Il canale viene invece configurato nel文件配置/包/ notifier.yaml
funzione戴尔的importanza德拉notifica (predefinita低
):
Abbiamo parlato一些canali电子邮件
e浏览器
。Vediamone altri。
Chattare con gli amministratori
我们是幅,aspettiamo合奏positivo联合国反馈。O almeno costruttivo联合国反馈。Se qualcuno pubblica联合国commento监狱假释来“大”啊“怪人”,potremmo volerli accettare稍velocemente degli altri。
苏每斜面messaggi, vogliamo essere avvisati联合国sistema di messaggistica istantanea松弛o电报,在aggiunta真主安拉正posta elettronica。
Installare il supporto di松弛/ Symfonyob娱乐下载通知:
1
美元ob娱乐下载symfony作曲家点播slack-notifier
每iniziare costruiamo il DSN /松弛。Ci occorre il标记e l 'identificativo del canale松弛崔inviare我messaggi:松:/ / ACCESS_TOKEN@default ?通道=通道
。
Poiche il牌di accesso deve essere riservato, salviamo il DSN /松弛nel portachiavi:
1
美元ob娱乐下载symfony控制台的秘密:集SLACK_DSN
票价lo stesso / l 'ambiente di produzione:
1
美元ob娱乐下载symfony控制台的秘密:集SLACK_DSN - env =刺激
Attivare il supporto真主安拉聊天松弛:
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) % '
每inviare Aggiorniamo la架势di notifica我messaggi自▽contenuto▽服务del commento (usiamo联合国'espressione regolare):
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{@@ -29 30 4 + 15 @@类CommentReviewNotification扩展通知实现EmailNotificatio返回美元消息;}++公共职能getChannels (RecipientInterface接收美元):数组+ {+如果(preg_match (' {\ b(好棒|)\ b}我,$ this - >评论- > getText ())) {+返回(“电子邮件”,“聊天/松弛”);+}++ $ this - >重要性(通知::IMPORTANCE_LOW);++返回(“电子邮件”);+}}
Abbiamo传递cambiato l 'importanza一些commenti“regolari”quanto questo modifica leggermente il戴尔'email设计。
E fatta !Inviando联合国commento con scritto“awesome”nel服务,dovremmo ricevere联合国messaggio松弛。
每quanto riguarda la posta elettronica e相信implementare l 'interfacciaChatNotificationInterface
每cambiare il呈现predefinito一些messaggi松弛:
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{私人美元评论;@@ -31、6 + 36 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 ())) {
马E meglio facciamo联合国航道avanti这样说。阿波特非sarebbe可笑的怪人accettare rifiutare联合国commento direttamente da松弛吗?
每accettare Modifichiamo la notifica l 'URL di revisione e aggiungere由于pulsanti nel messaggio松弛:
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
- - - / src /通知/ CommentReviewNotification.php+ + + b / src / / CommentReviewNotification.php通知@@ 3、6 + 3、7 @@名称空间的应用程序\通知;使用App \实体\评论;+使用Syob娱乐下载mfony \桥组件\通知\ \松弛\ \ SlackActionsBlock块;桥组件使ob娱乐下载用Symfony \ \通知\ \松弛\ \ SlackDividerBlock块;桥组件使ob娱乐下载用Symfony \ \通知\ \松弛\ \ SlackSectionBlock块;使用Syob娱乐下载mfony \桥组件\通知\ \松弛\ SlackOptions;@@ -17 10 + 18 12 @@使用Syob娱乐下载mfony \组件\通知\接受者\ RecipientInterface;类CommentReviewNotification扩展通知实现EmailNotificationInterface ChatNotificationInterface{私人美元评论;+私人reviewUrl美元;——公共职能__construct(评论评论美元)+公共职能__construct(评论评论,美元字符串reviewUrl美元){$ this - >评论= $评论;+ $ this - > reviewUrl = $ reviewUrl;父:__construct(“新评论”);}@@ -53 6 + 56 10 @@类CommentReviewNotification扩展通知实现EmailNotificatio - >块((新SlackSectionBlock()) - >文本(sprintf (“% s (% s)说:% s的,$ this - >评论- > getAuthor (), $ this - >评论- > getEmail (), $ this - >评论- > getText ())))新SlackActionsBlock + - >块((())+ - >按钮(“接受”,$ this - > reviewUrl,“主要”)+ - >按钮(“拒绝”,$ this - > reviewUrl。”?拒绝= 1”、“危险”)+));返回美元消息;
奥拉斯tratta di seguire cambiamenti ritroso。初来航道aggiorniamo l 'handler一些messaggi affinche includa l 'URL di revisione:
1 2 3 4 5 6 7 8 9 10 11 12
推荐- - - - - - MessageHandler / src / / CommentMessageHandler.php+ + + MessageHandler b / src / / CommentMessageHandler.php@@ -60 60 7 + 8 @@类CommentMessageHandler实现MessageHandlerInterface $ this - >总线- >调度($消息);}elseif ($ this - >工作流- >(评论,美元“发布”)| | $ this - >工作流- >(评论美元,publish_ham)) {- $ this - >通知- >发送(新CommentReviewNotification(评论美元),…$ this - >通知- > getAdminRecipients ());+ $ = new CommentReviewNotification通知(评论,美元消息- > getReviewUrl ());+ $ this - >通知- >发送(通知、美元…$ this - >通知- > getAdminRecipients ());}elseif ($ this - >工作流- >(评论美元,“优化”)){如果($评论- > getPhotoFilename ()) {$ this - > imageOptimizer - >调整($ this - > photoDir‘/’。$评论- > getPhotoFilename ());
年青一代si vedere, l 'URL di recensione dovrebbe essere杰克逊del commento aggiungiamolo奥拉:
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
- - - / src /信息/ CommentMessage.php+ + + b / src /信息/ CommentMessage.php@@ 5,14 + 5,21 @@名称空间应用\消息;类CommentMessage{私人$ id;+私人reviewUrl美元;私人美元上下文;公共函数__construct (int $ id数组$上下文= [])+公共职能__construct (reviewUrl美元美元int id字符串数组$上下文= []){$ this - > id = $ id;+ $ this - > reviewUrl = $ reviewUrl;= $ $ this - >上下文语境;}+公共职能getReviewUrl():字符串+ {+ $ this - > reviewUrl返回;+}+公共函数getId (): int{返回$ this - > id;
大概意思,aggiornare我控制器/ generare l 'URL di revisione e passarlo al costruttore del commento:
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 \工作流组件\ \注册;用树枝\环境;@@ -47 7 + 48 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@@ -17、6 + 17日7 @@使用Syob娱乐下载mfony \组件\ \ MessageBusInterface使者;使用Syob娱乐下载mfony \组件\ \通知\通知通知;使用Syob娱乐下载mfony \ \通知\ NotifierInterface组件;使用Syob娱乐下载mfony \组件\路由\注释\路线;+使用Syob娱乐下载mfony \组件\ \发电机\ UrlGeneratorInterface路由;用树枝\环境;类ConferenceController延伸AbstractController @@ -82年7 + 83,8 @@类ConferenceController延伸AbstractController“永久链接”= > $请求- > getUri ()];总线- $ this - > - >调度(新CommentMessage (- > getId()发表评论,美元上下文));+ $ reviewUrl = $ this - > generateUrl (“review_comment”, (“id”= > $评论- > getId ()], UrlGeneratorInterface:: ABSOLUTE_URL);+ $ this - >总线- >调度(新CommentMessage(评论- > getId (), reviewUrl美元,美元上下文));$通知- >发送(新通知('谢谢你的反馈;你的评论将被审核后发布。”,(“浏览器”)));
Disaccoppiare il配置significa票价cambiamenti在更合适的婚姻对象,马仁德il配置更灵巧的da testare validare e riutilizzare。
Riproviamoci, messaggio dovrebbe essere ora corretto:
在全体的il progetto Chiamate asincrone
反对le impostazioni predefinite le notifiche园子inviate在maniera asincrona,阿勒电子邮件:
Se avessimo disabilitato我mesasggi asincroni, avremmo avuto联合国leggero问题。每ogni commento riceviamo联合国'e-mail e联合国messaggio松弛。Se il messaggio松弛e errato (id canale sbagliato、令牌sbagliato ....),信使riprovera混乱关系回prima scartare messaggio。马siccome l 'email viene inviata每prima riceveremo混乱关系邮件e nessun messaggio松弛。
非appena全体的e asincrono,我messaggi diventano indipendenti。我messaggi SMS园子gia configurati asincroni内尔卡索在崔volessimo essere avvisati电话号码。
Notificare gli utenti通过电子邮件
L 'ultimo punto e di quello notificare gli utenti quando il洛commento e approvato。切不一点儿di implementarlo da独唱吗?
而oltre