Використання подій

Дата оновлення перекладу 2022-12-15

Використання подій

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

Подія MessageEvent::class

Типові цілі: Щоб зробити щось перед відправкою повідомлення (на кшталт логування того, яке повідомлення буде відправлено, або відображення чогось про подію, яка буде виконана).

Прямо перед відправкою повідомлення, оголошується клас події MessageEvent. Слухачі отримують подію MessageEvent:

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('The message with subject: %s has not been sent successfully. The error is: %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('The message has been successfully sent and have id: %s, $message->getMessageId()'));
});