我创建了一个事件订阅者,每次更新某个实体时会发送一封包含Swiftmailer的电子邮件,但事件会被触发两次,因此我会收到两次电子邮件。
我已关注this guide和this one。事件是:easy_admin.pre_update
EasyAdminBundle版本:1.17.9
services.yml
app.easy_admin.aprobar_publicacion:
class: AppBundle\EventListener\AprobarPublicacionSubscriber
arguments: ['@mailer','@service_container','@twig']
tags:
- { name: kernel.event_subscriber, event: easy_admin.pre_update, method: preUpdate }
AprobarPublicacionSubscriber.php
<?php
namespace AppBundle\EventListener;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\EventDispatcher\GenericEvent;
use AppBundle\Entity\VestidoDeNovia;
use AppBundle\Entity\PlantillaEmail;
class AprobarPublicacionSubscriber implements EventSubscriberInterface {
protected $mailer;
protected $container;
protected $twig;
public static function getSubscribedEvents() {
return array(
'easy_admin.pre_update' => array('preUpdate'),
);
}
public function __construct(\Swift_Mailer $mailer, \Symfony\Component\DependencyInjection\ContainerInterface $container, \Twig_Environment $twig) {
$this->mailer = $mailer;
$this->container = $container;
$this->twig = $twig;
}
public function preUpdate(GenericEvent $event) {
$entity = $event->getSubject();
if (!($entity instanceof VestidoDeNovia)) {
return;
}
$uow = $event->getArgument('em')->getUnitOfWork();
$uow->computeChangeSets();
$changeset = $uow->getEntityChangeSet($entity);
if (array_key_exists('estado', $changeset)) {
$estadoActual = $changeset['estado'][0]->getId();
if ($estadoActual != 2 and $entity->getEstado()->getId() == 2) {
$plantillaEmail = new PlantillaEmail();
$plantillaEmail = $event->getArgument('em')->getRepository(PlantillaEmail::class)->find(6);
$message = (new \Swift_Message($plantillaEmail->getAsunto()))
->setFrom($this->container->getParameter('direccion_mail_sistema'))
->setTo($entity->getUsuario()->getEmail())
->setBody(
$this->twig->render(
'AppBundle::Emails/publicacion_exitosa.html.twig', array(
'titulo' => $plantillaEmail->getAsunto(),
'mensaje' => $plantillaEmail->getMensaje(),
)
), 'text/html'
)
;
$this->mailer->send($message);
}
}
}
}
我缺少什么?