Laravel Notifications - отложить отправку электронной почты и отменить, если условие выполнено - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть приложение, в которое я отправляю push-уведомление, что хорошо, если пользователь вошел в приложение - однако, если он не / если он не прочитал уведомление в течение X минут, я хотел бы отправитьим электронное письмо.

Я собираюсь использовать уведомления Laravel для создания уведомлений о почте, трансляции и базе данных.По методу toMail() я возвращаю отправку с задержкой -

public function toMail($notifiable)
{
    return (new \App\Mail\Order\NewOrder($this->order))
        ->delay(now()->addMinutes(10));
}

По истечении нескольких минут электронное письмо отправит , но , прежде чем отправка начнется.Я хотел бы выполнить проверку, чтобы увидеть, было ли push-уведомление / уведомление базы данных уже помечено как прочитанное и отменило ли оно отправку электронной почты.Единственный способ, которым я могу думать, это привязаться к событию MessageSending, которое запекается в Laravel -

// listen for emails being sent
'Illuminate\Mail\Events\MessageSending' => [
    'App\Listeners\Notification\SendingEmail'
],

Единственная проблема заключается в том, что этот слушатель получает почтовое событие Swift, а не исходное отправляемое письмо.отправлял, так что я не знаю, как отменить это.Есть идеи и спасибо заранее?

1 Ответ

0 голосов
/ 15 декабря 2018

Класс расширяет Уведомление

public function via($notifiable)
{
    if($this->dontSend($notifiable)) {
        return [];
    }
    return ['mail'];
}

public function dontSend($notifiable)
{
    return $this->appointment->status === 'cancelled';
}

Класс EventServiceProvider

protected $listen = [
    NotificationSending::class => [
        NotificationSendingListener::class,
    ],
];

Класс NotificationSendingListener

public function handle(NotificationSending $event)
{
    if (method_exists($event->notification, 'dontSend')) {
        return !$event->notification->dontSend($event->notifiable);
    }
    return true;
}

Подробнее см. В статье Обработка отложенных уведомлений в Laravel

...