Symfony EasyAdminBundle事件pre_update触发两次

时间:2018-01-17 11:25:31

标签: symfony

我创建了一个事件订阅者,每次更新某个实体时会发送一封包含Swiftmailer的电子邮件,但事件会被触发两次,因此我会收到两次电子邮件。

我已关注this guidethis 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);
        }
    }
}

}

我缺少什么?

0 个答案:

没有答案