LARAVEL:使用WYSIWYG编辑器发送存储在DB中的邮件

时间:2018-10-11 09:49:46

标签: php html laravel laravel-5 laravel-blade

我正在尝试为我的Laravel项目设置电子邮件功能。我已经完成了所有设置,Mailable类,Mailgun,发送邮件的控制器等。

我已经阅读了Laravel邮件文档,并尝试按照建议的方式进行操作,为邮件等使用刀片模板。

问题是,我的客户将使用WYSIWYG编辑器制作自己的邮件,因此我不能只在blade.php中制作邮件模板。我想从数据库中获取邮件内容,然后将其注入到刀片文件中,我设法成功了。

但是,假设邮件内容为“ Hello {{$ name}}”,当我从数据库中获取该内容并将其注入到刀片模板中时,发送的邮件便会自动显示“ Hello {{$ name}}而不是“ Hello John Doe”。我在构建函数的Mailable类中发送$ name。

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}}”一样。

我的刀片模板如下:

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

有什么建议吗? 我希望这对外面的人有意义:D

1 个答案:

答案 0 :(得分:0)

在输出之前,您可以只使用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');
}