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

Php LARAVEL:发送存储在DB中的邮件,使用WYSIWYG编辑器生成,php,html,laravel,laravel-5,laravel-blade,Php,Html,Laravel,Laravel 5,Laravel Blade,我正在尝试为我的Laravel项目设置电子邮件功能。我已经完成了所有的设置,邮件类,邮枪,发送邮件的控制器,等等 我已经阅读了Laravel邮件文档,并尝试按照它的建议去做,为我的邮件使用刀片模板等 问题是,我的客户将使用所见即所得编辑器制作他们自己的邮件,所以我不能只在blade.php中制作邮件模板。我想从数据库中获取邮件内容,然后将其注入到一个刀片文件中,我已经成功地使用了该文件 但是假设邮件内容是“Hello{{{$name}”,当我从数据库中获取该内容并将其注入到blade模板中时,实

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

我已经阅读了Laravel邮件文档,并尝试按照它的建议去做,为我的邮件使用刀片模板等

问题是,我的客户将使用所见即所得编辑器制作他们自己的邮件,所以我不能只在blade.php中制作邮件模板。我想从数据库中获取邮件内容,然后将其注入到一个刀片文件中,我已经成功地使用了该文件

但是假设邮件内容是“Hello{{{$name}”,当我从数据库中获取该内容并将其注入到blade模板中时,实际发送的邮件会说“Hello{{{$name}}”,而不是“Hello John Doe”。我正在我的Mailable类中的build函数中发送$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>

确认信
{!!$content!!}

有什么建议吗?
我希望这对其他人来说是有意义的:D

在输出之前,您能使用str_replace()吗

并在构建函数中调用它

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');
}

我甚至没有想过要走那条路,但它很好用。谢谢!:-)通过扫描字符串中的不同{{占位符}}并替换为相关变量(如果setI记不清具体是如何工作的,但您想查看Blade::compileString),可以更巧妙地使用replaceContent()函数。
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');
}