LARAVEL: отправка почты, хранящейся в БД, с использованием редактора WYSIWYG - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь настроить функцию электронной почты для моего проекта Laravel.Я выполнил все настройки, класс Mailable, Mailgun, контроллер для отправки почты и т. Д.

Я просмотрел документацию по почте Laravel и попытался сделать, как было предложено, с помощью шаблона лезвия.за мою почту и т. д.

Дело в том, что мои клиенты собираются создавать свои собственные письма с помощью редактора WYSIWYG, поэтому я не могу просто создавать почтовые шаблоны в blade.php.Я хочу получить почтовый контент из базы данных, а затем вставить его в блейд-файл, с которым мне удалось справиться.

Но, скажем, почтовый контент имеет вид "Hello {{$ name}}msgstr ", когда я получаю это из базы данных и вставляю его в шаблон блейда, отправляемое сообщение на устном языке говорит" Hello {{$ name}} "вместо" Hello John Doe ".Я отправляю $ name в моем классе Mailable, в функции сборки.

class Confirmation extends Mailable
{
  use Queueable, SerializesModels;

  /**
   * Create a new message instance.
   *
   * @return void
   */
   public function __construct(Customer $customer, Mail $mail_content)
   {
     $this->customer = $customer;
     $this->mail_content = $mail_content;
   }

   /**
    * Build the message.
    *
    * @return $this
    */
   public function build()
   {
     return $this->from('noreply@example.com')
                 ->with([
                     'name' => $this->customer->name,
                     'content' => $this->mail_content->content,
                 ])
                 ->subject('Confirmation')
                 ->view('emails.test');
   }
}

Так что, если бы содержимое было «Hello {{$ name}}», я бы хотел, чтобы имя из функции сборки былозаменить {{$ name}} в содержании.Но поскольку он поступает из базы данных, он, очевидно, не обрабатывается так же, как если бы я просто написал «Hello {{$ name}}» в файле представления.

Мой шаблон blade-сервера выглядит следующим образом:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Confirmation mail</title>
</head>
<body>
  {!! $content !!}
</body>

Есть предложения?Я надеюсь, что это имеет смысл для кого-то там: D

1 Ответ

0 голосов
/ 11 октября 2018

Не могли бы вы просто использовать str_replace () перед выводом?http://php.net/manual/en/function.str-replace.php

public function replaceContent() {

    $this->mail_content->content = str_replace('{{$name}}', $this->customer->name, $this->mail_content->content)

}

и вызовите его в функции сборки

public function build(){

    $this->replaceContent();

    return $this->from('noreply@example.com')
        ->with([
            'name' => $this->customer->name,
            'content' => $this->mail_content->content,
        ])
        ->subject('Confirmation')
        ->view('emails.test');
}
...