负责电子邮件管理

电子邮件:从消息, celle de plus bas niveau, àNotificationEmail, celle de niveau le加上élevé。Vous utiliserez probabilityla class电子邮件Le加上souvent, maisNotificationEmailEst le choix parfait pour les email internes。

Dans le gestionnaire de messages, remplaçons la logique d'auto-validation:

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
——MessageHandler / src / / CommentMessageHandler.php+ + + MessageHandler b / src / / CommentMessageHandler.php@@ -7,6 +7,9 @@使用App\Repository\CommentRepository;使用App \ SpamChecker;使用原则\ ORM \ EntityManagerInterface;使用日志Psr \ \ LoggerInterface;+使用Syob娱乐下载mfony \桥\树枝\ Mime \ NotificationEmail;+使用Syob娱乐下载mfony \ DependencyInjection \属性\ \组件自动装配;+使用Syob娱乐下载mfony \ \梅勒\ MailerInterface组件;使用Syob娱乐下载mfony \信使\ \组件属性\ AsMessageHandler;使用Syob娱乐下载mfony \组件\ \ MessageBusInterface使者;使用Syob娱乐下载mfony \工作流组件\ \ WorkflowInterface;@@ -20,6 +23,8 @@ class CommentMessageHandler private CommentRepository $ CommentRepository, private MessageBusInterface $bus, private WorkflowInterface $commentStateMachine,+ private MailerInterface $mailer+ #[自动连接('%admin_email%')] private string $adminEmail,LoggerInterface $logger = null,){} @@ -42,8 +47,13 @@类CommentMessageHandler $this->entityManager->flush();$ 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 - >冲洗();+ $this->mailer->send((new NotificationEmail())+ ->subject('新评论已发布')+ - > htmlTemplate(邮件/ comment_notification.html.twig)+ - > ($ this - > adminEmail)+ - - - > ($ this - > adminEmail)+ ->context(['comment' => $comment])+);} elseif ($this->logger) {$this->logger->debug('删除评论消息',['comment' => $comment->getId(), 'state' => $comment->getState()]);}

L 'interfaceMailerInterfaceEst le point d'entrée电子邮件首席和常驻特使send ()

Pour envoy un email, nous avons besoin d'un expéditeur (l'en-tête/发送方)。Au lieu de le définir explicitement sur l instance Email, définissez-le globalement:

1 2 3 4 5 6 7 8
——/ config /包/ mailer.yaml+ + + b / config /包/ mailer.yaml@@ -1,3 +1,5 @@框架:mail: dsn: '%env(MAILER_DSN)%'+信封:+发件人:"%admin_email%"

Le模板替换quelques blocs倒personaliser Le message de l'email et pour ajouter des liens permeant à l'admin d'accepter ou de rejeter un commentaire。路由参数匹配paramètre路由有效ajouté链接paramètre链接(链接重定向类似à/管理/评论/审查/ 42吗?拒绝= true)。

Le模板par défautNotificationEmail利用漆黑的代替HTML倒générer les电子邮件。Il permet de créer des电子邮件响应兼容avec tous les客户端消息库。

倒une compatibilité最大限度的avec les客户端de消息,la mise en page de base de la notification convert les feuilles de style externes en CSS enligne(通过le package CSS inliner)。

Ces双功能字体党派d'extensions树枝optionnelles qui doivent être installées:

1
ob娱乐下载交响乐作曲家要求“树枝/ cssinliner-extra: ^ 3”“树枝/ inky-extra: ^ 3”

review_comment不存在安可。Créons un contrôleur admin pour la gérer:

src /控制器/ AdminController.php
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
名称空间应用程序控制器使用应用程序实体评论使用应用程序消息CommentMessage使用学说ORMEntityManagerInterface使用ob娱乐下载FrameworkBundle控制器AbstractController使用ob娱乐下载组件HttpFoundation请求使用ob娱乐下载组件HttpFoundation响应使用ob娱乐下载组件信使MessageBusInterface使用ob娱乐下载组件路由注释路线使用ob娱乐下载组件工作流WorkflowInterface使用嫩枝环境AdminController扩展AbstractController公共函数__construct(私人环境嫩枝, private EntityManagerInterfaceentityManager, private MessageBusInterface公共汽车,){}#[Route('/admin/comment/review/{id}', name: 'review_comment')]公共函数reviewComment(请求请求、评论评论, WorkflowInterfacecommentStateMachine响应接受= !请求->查询->get (“拒绝”);如果commentStateMachine->可以(评论“发布”)) {过渡接受?“发布”“拒绝”;}elseifcommentStateMachine->可以(评论“publish_ham”)) {过渡接受?“publish_ham”“reject_ham”;}其他的返回响应(“评论已审阅或状态不正确。”);}commentStateMachine->应用(评论过渡);->entityManager->冲洗();如果接受) {->公共汽车->调度(CommentMessage (评论->getId ()));}返回响应(->嫩枝->呈现(“管理/ review.html.twig”, (“过渡”= >过渡“评论”= >评论)));}}

L'URL渗透la验证du commentaire开始/管理/, afin qu'elle soit protégée par le par -feu défini lors d'une étape précédente。L'admin doit se connecter pour accéder à cette资源。

Au lieu de créer une instance de响应, nous avons utilisé une méthode加上courte, fournie par la classe de baseAbstractController

Une fois la validation terminée, un court template remercie l'admin pour son dur labor:

模板/ admin / review.html.twig
1 2 3 4 5 6 7 8
{%扩展“base.html。嫩枝' %}{%身体%}<h2>评论已审核,谢谢!h2><p>应用转型:<强大的>{{transition}}强大的>p><p>新状态:<强大的>{{发表评论。州}}强大的>p>{%endblock%}

Ou à partir de la web调试工具栏:

/"align=

Soumettez un commentaire, vous devriez recevir un email dans l'interface du webmail:

/"align=

在邮件和界面上,我接受你拒绝我的评论:

/"align=

Vérifiez les logs avec服务器:日志这是我的职责prévu。

此工作,包括代码示例,是根据知识共享协议BY-NC-SA 4.0许可证。