我在解析变量时遇到了问题。
我有动态电子邮件模板,适用于所有类型的电子邮件,例如注册,激活等
假设我想发送反馈电子邮件,我有电子邮件模板,用于存储在数据库中的反馈。
在数据库中,它存储为名称:{{$ name}}
但是当我发送电子邮件时,它发送的是姓名:{{$ name}},而不是像名字这样的实际名称:john
以下是我的代码:
$name = $request->get('name');
$address = $request->get('address');
$phone = $request->get('phone');
$emailaddress = $request->get('email_address');
$feedbacktext = $request->get`enter code here`('message');
Mail::send('lugmety.frontend.partials.contactUsEmail',
[ 'name' => $name,
],
function ($mail)
use ($address, $name,$phone,$emailaddress,$feedbacktext) {
$mail->to('anandshrestha57@gmail.com')->subject('FeedBack Form')->from($emailaddress,$name);
});
这是我的视图,其中包含从数据库中获取的电子邮件模板。
<?php echo \App\EmailTemplate::where('slug','contact-us')->first()->body; ?>
感谢您的帮助。
答案 0 :(得分:1)
private function parsed_content($email_template, array $args = array()){
$generated = \Blade::compileString($email_template);
ob_start() and extract($args, EXTR_SKIP);
try{
eval('?>'.$generated);
}catch (\Exception $e){
b_get_clean(); throw $e;
}
$content = ob_get_clean();
return $content;
}
用于解析存储在数据库中的电子邮件模板中的变量:
$emailTemplate = EmailTemplate::where('slug','contact-us')->first();
$email_body = $this->parsed_content($emailTemplate, array(
'name' => $name,
'address' => $address,
'phone' => $phone,
'emailaddress' => $emailaddress,
'feedbacktext'=>$feedbacktext
));
$body = json_decode($email_body,true)['body'];
发送电子邮件:
Mail::send([],[],
function ($mail)
use ($body,$address, $name,$phone,$emailaddress,$feedbacktext) {
$mail->to('anandshrestha57@gmail.com')->subject('FeedBack Form')->from($emailaddress,$name)
->setBody($body,'text/html');
});
所以不需要提出每一个观点。来源:@ Is there any way to compile a blade template from a string?
答案 1 :(得分:0)
在EmailTemplate
模型
//$value is $EmailTemplate->body value
public function getBodyAttribute($value)
{
//get value name by request function
$name = request()->get('name');
//do your regex code to replace {{ name }} from $name in $value and update.....
//finaly return $value;
return $value;
}