gpt4 book ai didi

Symfony/Sonata Admin Bundle/编辑记录后发送电子邮件

转载 作者:行者123 更新时间:2023-12-02 21:32:15 26 4
gpt4 key购买 nike

使用 SonataAdminBundle 编辑记录后,我需要根据模板发送电子邮件。

在正常站点中,我在 Controller 中发送电子邮件。像这样的事情:

$message = \Swift_Message::newInstance()
->setContentType('text/html')
->setSubject('Subject')
->setFrom('from@site.com')
->setTo($member->getEmail())
->setBody(
$this->renderView(
'AcmeSiteBundle:Site:email.html.twig',
array('name' => $member->getFirstName())
)
)
;
$this->get('mailer')->send($message);

但在管理中,我配置了 MyAdminconfigureFormFieldspreUpdatepostUpdate 方法,这些方法扩展自 管理员

最佳答案

解决方案是:使用EventListener。

使用以下代码在VendorName/SiteBundle/EventListener中创建文件AdminApplicationListener.php:

<?php

namespace VendorName\SiteBundle\EventListener;

class AdminApplicationListener
{
/**
*
* @var Swift_Mailer
*/
private $__mailer = null;
private $__templating = null;

public function __construct(\Swift_Mailer $mailer, $templating)
{
$this->__mailer = $mailer;
$this->__templating = $templating;
}

public function onApplication( \Sonata\AdminBundle\Event\PersistenceEvent $event )
{
$ac = $event->getObject();

$message = \Swift_Message::newInstance()
->setContentType('text/html')
->setSubject('[VendorName] Object was edited')
->setFrom('admin@VendorName.ru')
->setTo($ac->getEmail())
->setBody(
$this->__templating->render(
'VendorNameSiteBundle:Admin:email.html.twig',
array('name' => $ac->getFirstName())
)
)
;
$this->__mailer->send($message);

}
}

VendorName/SiteBundle/Resources/config/services.yml中添加以下内容:

services:
vendor_name.admin.on_application:
class: VendorName\SiteBundle\EventListener\AdminApplicationListener
arguments:
mailer: @mailer
templating: @templating
tags:
- { name: kernel.event_listener, event: sonata.admin.event.persistence.post_update, method: onApplication }

我认为这不是最佳实践,但作为第一步,这是可以的:)

关于Symfony/Sonata Admin Bundle/编辑记录后发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26830619/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com