Laravel Get Mail className из события MessageSending - PullRequest
0 голосов
/ 20 декабря 2018

Я использую laravel 5.7, поэтому при отправке электронной почты через интерфейс Mail запускаются два события Mail\Events\MessageSending и Mail\Events\MessageSent, поэтому моя цель - перехватить событие MessageSending и получить класс mailabe, используемый для отправки электронной почты (пример mail\Ordershipped) и остановите его.

<?php

namespace App\Listeners;

use Illuminate\Mail\Events\MessageSending;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class LogSendingMessage
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  MessageSending  $event
     * @return void
     */
    public function handle(MessageSending $event)
    {

        //here i want to check what mailable class used and stop it.
        if ($mailable == 'Ordershipped')
        return false;

        // if another mailable class (example: userVerification)
        else

         return true;
    }
}

1 Ответ

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

На данный момент Событие не знает, что такое почтовый тип, так как HTML уже создан из блейда.

Однако вы можете добавить значения к базовому классу быстрой почты в вашем почтовом сообщении.

В папке App\Mail создайте файл с именем Mailable.php.Теперь это ваш новый почтовый класс, с которого будут расширены все ваши почтовые сообщения.

namespace App\Mail;
use Illuminate\Contracts\Mail\Mailer as MailerContract;
use Illuminate\Mail\Mailable as BaseMailable; // Extend off laravel mailable

abstract class Mailable extends BaseMailable
{
    public function send(MailerContract $mailer)
    {
        //Initializes properties on the Swift Message object
        $this->withSwiftMessage(function ($message) {
            $message->mailable = get_class($this);
        });

        parent::send($mailer);
    }
}

Используйте этот класс для всех ваших почтовых сообщений, например, так:

use App\Mail\Mailable; // This is your new mailable parent class

class UserConfirmEmail extends Mailable
{
    public function build()
    {
         // Build email
    }
}

Затем вы можете получитьпочтовое имя из вашего объекта swift_mail, которое является атрибутом сообщения переменной $event, например, $event->message.

// App\Listeners\LogMessageSending.php
public function handle(MessageSending $event)
{

    //here i want to check what mailable class used and stop it.
    if ($event->message->mailable == 'Ordershipped') {
        return false;
    }
    // if another mailable class (example: userVerification)
    else {
     return true;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...