EventSubscriber не срабатывает при событии - PullRequest
0 голосов
/ 26 февраля 2019

Я использую symfony 3.2.7 и хочу сохранить информацию о каждом письме, отправленном через приложение (используя Swift Mailer), в моей базе данных.Я пытаюсь использовать EventSubscriber для этого, поскольку Swift Mailer отправляет константу RESULT_SUCCESS из класса Swift_Events_SendEvent, когда электронное письмо успешно отправлено.Но это просто не работает.

Файл, содержащий EventSubscriber, определенно обрабатывается при отправке почты (чтобы проверить это, я намеренно добавил неверный синтаксис в файл и получаю синтаксическую ошибку, когда почтаотправлено), но функция onMailSent явно не вызывается, так как информация электронной почты не хранится в моей базе данных.И эта же функция работает в другом контексте, поэтому проблема не в самой функции.

Что я делаю не так?Вот мой код:

SentMailsListener.php:

<?php

namespace Fidelise\SignUpBundle\EventListener;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Fidelise\SignUpBundle\Entity\EmailsHistory;
use Swift_Events_SendEvent;

class SentMailsListener implements EventSubscriberInterface
{

    public static function getSubscribedEvents()
    {
        return [Swift_Events_SendEvent::RESULT_SUCCESS => 'onMailSent'];
    }

    public function onMailSent(Swift_Events_SendEvent $event)
    {
        $em = $this->getDoctrine()->getManager();
        $message = $event->getMessage();
        $email = new EmailsHistory();
        $email->setRecipient(key($message->getTo()));
        $email->setSubject($message->getSubject());
        $email->setBody($message->getBody());
        $email->setSender(key($message->getFrom()));
        $em->persist($email);
        $em->flush();
    }
}

services.yml:

services:
    mail_sent_subscriber:
        class: Fidelise\SignUpBundle\EventListener\SentMailsListener
        tags:
            - { name: kernel.event_subscriber }

1 Ответ

0 голосов
/ 26 февраля 2019

Что нужно сделать, это зарегистрировать плагин swiftmailer.Это не прослушиватель событий диспетчера событий:

<?php

namespace Fidelise\SignUpBundle\EventListener;

use Swift_Events_SendEvent;
use Swift_Events_SendListener;

class SentMailsListener implements Swift_Events_SendListener
{
    public function sendPerformed(Swift_Events_SendEvent $event): void
    {
        // ...
    }
}
services:
    mail_sent_subscriber:
        class: Fidelise\SignUpBundle\EventListener\SentMailsListener
        tags:
            - { name: swiftmailer.default.plugin }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...