Php 在Laravel中编辑电子邮件模板
我需要编辑模板,用于管理面板中的电子邮件。有什么想法吗 我想有几种方法:Php 在Laravel中编辑电子邮件模板,php,laravel,email,laravel-5,message-queue,Php,Laravel,Email,Laravel 5,Message Queue,我需要编辑模板,用于管理面板中的电子邮件。有什么想法吗 我想有几种方法: 将电子邮件模板保存在文本字段的DB中,在管理面板中编辑它,然后在刀片视图中显示文本 这种方法实现的问题是我必须在blade模板中显示php变量,然后使用最终代码作为电子邮件的html。我想,这对拉威尔来说太难了 另外一个问题是,如果我将{{$var}}存储在DB中的模板文本中,它将显示为文本,blade编译器不会处理它 仅将电子邮件中的静态文本信息存储在数据库中,然后在模板中显示。PHP变量将单独传输 这种方法将解决php
$view = view('template')->render();
mail(..., $view, ...);
但我不想使用它,因为我想使用Mail::queue()查询电子邮件,但我不知道如何将它与PHP Mail()一起使用
感谢大家的回复。您可以创建自己的变量语法,并将电子邮件模板作为文本存储在数据库中。例如,您可以将每个变量存储为
${variable\u KEY}
字符串
然后在准备电子邮件的过程中,你应该将所有这些结构解析为它们的真实价值。我不知道需要哪些变量,但在电子邮件准备过程中,您应该执行以下步骤:
${VARIABLE\u KEY}
str\u replace
。例如,如果要将当前用户的电子邮件粘贴到电子邮件中(并且模型user
的表有一个电子邮件字段),则可以创建变量:${user.name},然后手动将其替换为简单的stru replace
函数:
$variables['${user.name}']=Auth::user()->email;
str_replace(数组_键($variables)、数组_值($variables)、$yourEmailTemplateBody)
此外,您不仅可以在电子邮件模板正文中,还可以在电子邮件主题中使用相同的方法进行替换
然后,您必须创建自己的类,该类扩展了LaravelLightning\Mail\Mailable
class。在这个类中,您应该定义build
方法,在这个方法中,您不仅可以使用视图的名称,还可以使用一些附加参数,例如在“常规”视图中,例如:
class SomeClassName extends Mailable
{
public function build()
{
$email = $this->view('mail.common', [
'mail_header' => 'some header',
'mail_footer' => 'some footer',
])->subject('Your subject');
...
return $email;
}
例如,在您的视图中,您可以使用一些额外的参数存储整个电子邮件的布局:页脚和页眉,如我的示例所示
您还可以为${VARIABLE\u NAME}
构造创建更复杂的语法,例如,VARIABLE\u NAME
可以是PHP或Laravel表示法中的方法定义,即:SomeClass::someStaticMethod
。您可以检测此情况并通过解决SomeClass
。它也可以是对象.field
符号,例如,user.email
,其中user
是当前的Auth::user()
但在这种情况下要小心:如果您将授予所有用户使用此变量编辑电子邮件模板的权限,则应过滤用于调用的字段或可用方法和类,以防止执行电子邮件模板中任何可用类的任何方法或防止显示私人信息。
你可以阅读关于写邮件的文章我昨天为一个项目写了这篇文章,发现了一篇很好的帖子,更详细地描述了Alexander的答案。核心是使用以下方法创建
电子邮件模板
模型:
public function parse($data)
{
$parsed = preg_replace_callback('/{{(.*?)}}/', function ($matches) use ($data) {
list($shortCode, $index) = $matches;
if( isset($data[$index]) ) {
return $data[$index];
} else {
throw new Exception("Shortcode {$shortCode} not found in template id {$this->id}", 1);
}
}, $this->content);
return $parsed;
}
用法示例:
$template = EmailTemplate::where('name', 'welcome-email')->first();
Mail::send([], [], function($message) use ($template, $user)
{
$data = [
'firstname' => $user->firstname
];
$message->to($user->email, $user->fullname)
->subject($template->subject)
->setBody($template->parse($data));
});
有关所有详细信息(db迁移、单元测试等),请参阅原始帖子,网址为,您只需使用这个很棒的laravel软件包即可: 功能(来自自述文件):
- 不使用命令行创建邮件
- 在单个位置预览/编辑所有邮件
- 模板(超过20个随时可用的电子邮件模板)
- 所见即所得电子邮件HTML/Markdown编辑器