我正在尝试为我的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
答案 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');
}