Отображение уведомления Laravel (MailMessage) с уценкой после отправки

Я сохраняю каждое электронное письмо, которое отправляю объекту, в базу данных, создавая функцию storeEmail и вставляя класс MailMessage в модель EmailMessage. Все работает нормально, и основная цель - отобразить сообщение в том виде, в каком оно было, когда получатель получил его, и получить все сообщения, которые я отправил как User, на страницу. Чтобы было намного проще получить визуализацию каждого конкретного сообщения в цикле foreach, я думаю, что лучше получить его из модели.

Это мой класс уведомлений:

class SimpleEmail extends Notification
{
    use Queueable;

    private $link;
    private $user;

    /**
     * Create a new notification instance.
     *
     * @return void
     */
    public function __construct($link)
    {
        $this->link = $link;
        $this->user = Auth::user();
    }

    /**
     * Get the notification's delivery channels.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function via($notifiable)
    {
        return ['mail'];
    }

    /**
     * Get the mail representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return \Illuminate\Notifications\Messages\MailMessage
     */
    public function toMail($notifiable)
    {   
        $mail = (new MailMessage)
            ->from($this->user->email, $this->user->name)
            ->subject('My Dummy Subject')
            ->greeting('To: '.$notifiable->email)
            ->action('Action Button', url($this->link))
            ->line('Thank you for reading my message')
            ->salutation('Friendly, '.$this->user->name);

        $this->storeEmail($mail,$notifiable);
        return $mail;
    }

    public function storeEmail($mail,$notifiable){
        $email = new EmailMessage;
        $email->sender_type = 'App\User';
        $email->sender_id = $this->user->id;
        $email->mail = $mail;
        $email->save();
        $notifiable->email_messages()->save($email);
    }
}

Note:

  1. Я использую Illuminate\Notifications\Messages\MailMessage
  2. Мой класс расширяется Illuminate\Notifications\Notification
  3. Я сохраняю (новое сообщение MailMessage) в $ email-> mail = $ mail;

Я пробовал dd($email->mail); и получаю следующее:

 ^ array:20 [▼
  "view" => null
  "viewData" => []
  "markdown" => "notifications::email"
  "theme" => null
  "from" => array:2 [▶]
  "replyTo" => []
  "cc" => []
  "bcc" => []
  "attachments" => []
  "rawAttachments" => []
  "priority" => null
  "callbacks" => []
  "level" => "info"
  "subject" => "My Dummy Subject"
  "greeting" => "To: Dohn John"
  "salutation" => "Friendly, Nikolas Diakosavvas"
  "introLines" => array:2 [▶]
  "outroLines" => array:1 [▶]
  "actionText" => "Action Button"
  "actionUrl" => "http://my-example-url.com ▶"

Как я могу отобразить почтовое уведомление, как когда я его отправил? Какое для этого оптимальное решение? Заранее спасибо

ИЗМЕНЕНО

Удалось отобразить MailMessage с помощью этого кода работает:

$email = EmailMessage::first();
return (new \App\Notifications\SimpleEmail('my-link', $email->recipient->assignto))->toMail($email->recipient);

Но это не совсем то, что я хотел, потому что каждый раз мне нужно найти:

  1. Какой класс уведомлений используется в каждом электронном письме, чтобы я мог его отобразить.
  2. Переменные для каждого класса уведомлений.

person diakosavvasn    schedule 27.01.2020    source источник
comment
Вы можете отобразить их в браузере laravel.com/docs/master/mail#rendering-mailables   -  person GBWDev    schedule 27.01.2020
comment
Да я знаю, но как вывести сообщение из EmailMessage Model ?? Потому что легче получить доступ к сообщению из модели, чем искать в классе уведомлений и каждый раз передавать необходимые переменные.   -  person diakosavvasn    schedule 27.01.2020
comment
В документах указано return (new App\Mail\InvoicePaid($invoice))->render();, поэтому в вашем примере попробуйте просто передать $email или $email->mail вместо их $ invoice. Также исправьте почтовый путь   -  person GBWDev    schedule 27.01.2020
comment
Нет, это не работает, потому что $invoice - это переменная, используемая в классе InvoicePaid   -  person diakosavvasn    schedule 27.01.2020


Ответы (1)


Для этого:

1. Вы можете создать средство доступа.

2. Используйте render Markdown метод.

3. Передайте render метод уценки почты, сохраненной в storeEmail.

Вы можете увидеть пример выше:

use \Illuminate\Mail\Markdown;

public function getRenderAttribute(){
    $markdown = new Markdown(view());
    return $markdown->render($this->mail['markdown'], $this->mail);
}
person Code Seeker    schedule 30.01.2020