Использование событий

Использование событий

Класс Transport` компонента Notifier позволяет вам опционально подключаться к жизненному циклу через события.

Событие MessageEvent::class

Типичные цели: Делать что-то до отправки сообщения (вроде логирования, какое сообщение будет отправлено, или отображения чего-то о событии, которое будет выполнено).

Just before send the message, the event class MessageEvent is dispatched. Listeners receive a MessageEvent event:

1
2
3
4
5
6
7
8
9
use Symfony\Component\Notifier\Event\MessageEvent;

$dispatcher->addListener(MessageEvent::class, function (MessageEvent $event) {
    // получает экземпляр сообщения
    $message = $event->getMessage();

    // записать лог чего-то
    $this->logger(sprintf('Message with subject: %s will be send to %s, $message->getSubject(), $message->getRecipientId()'));
});

Событие FailedMessageEvent

Типичные цели: Делать что-то до вызова исключения (повторная попытка отправки сообщения или запись лога дополнительной информации).

Когда вызывается исключение во время отправки сообщения, развёртывается класс события FailedMessageEvent. Слушатель может сделать что угодно полезное до вызова исключения.

Слушатели получают событие FailedMessageEvent:

1
2
3
4
5
6
7
8
9
10
11
12
use Symfony\Component\Notifier\Event\FailedMessageEvent;

$dispatcher->addListener(FailedMessageEvent::class, function (FailedMessageEvent $event) {
    // получает экземпляр сообщения
    $message = $event->getMessage();

    // получает экземпляр ошибки
    $error = $event->getError();

    // записать лог чего-то
    $this->logger(sprintf('Сообщение с темой: %s не было отправлено успешно. Ошибка: %s, $message->getSubject(), $error->getMessage()'));
});

Событие SentMessageEvent

Типичные цели: Выполнить какое-то действие, когда сообщение успешно отправлено (типа извлечения id, возвращённого, когда сообщение было отправлено).

После успешной отправки сообщения, развёртывается класс события SentMessageEvent. Слушатели получают событие SentMessageEvent:

1
2
3
4
5
6
7
8
9
use Symfony\Component\Notifier\Event\SentMessageEvent;

$dispatcher->addListener(SentMessageEvent::class, function (SentMessageEvent $event) {
    // получает экземпляр сообщения
    $message = $event->getOriginalMessage();

    // записать лог чего-то
    $this->logger(sprintf('Сообщение было успешно отправлено и имеет id: %s, $message->getMessageId()'));
});