Есть ли какое-либо событие после отправки электронного письма в Laravel - PullRequest
0 голосов
/ 21 апреля 2020

Мой поток приложений выглядит следующим образом:

  1. Я создал счет, статус счета = created
  2. Я отправляю его пользователю, использую Queueable, поэтому процесс отправки электронная почта отделена от основного приложения.
  3. После отправки электронной почты статус счета должен быть sent

Проблема в том, что я не могу найти событие, например AfterEmailSent, для уточнения. c Почтовый класс в app/Mail.

1 Ответ

0 голосов
/ 21 апреля 2020

Вам необходимо создать собственное событие, сначала создайте его:

php artisan make:event InvoiceEmailSentEvent

внутри Events\InvoiceEmailSentEvent.php добавьте следующее:

 public $invoice;

 public function __construct($invoice)
    {
        $this->invoice = $invoice;
    }

Создайте слушатель события:

php artisan make:listener InvoiceEmailSentListener

Для функции handle() внутри Listeners\InvoiceEmailSentListener.php добавьте

//import your Mailable up here

public function handle(InvoiceEmailSentEvent $event)
    {

        // You don't have to sent email here, but I just added it if $invoice contains an email field
        $email = $event->invoice->email;
        Mail::to($email)->send(new Your_Mailable_Class_Goes_Here($event->invoice));
       // UPDATE INVOICE STATUS HERE
    }

Зарегистрируйте свое событие и слушателя в $listen массив в App\Providers\EventServiceProvider.php

  'App\Events\InvoiceEmailSentEvent' => [
            'App\Listeners\InvoiceEmailSentListener',
        ],

Наконец, в вашем контроллере вы можете вызвать событие, передав свой счет, который вы хотите обновить, например,

 $invoice = Invoice::findOrFail($invoice_id)->first();
 event(new InvoiceEmailSentEvent($invoice));
...