您可以创建自己的变量语法并将电子邮件模板作为文本存储在数据库中。例如,您可以将每个变量存储为${VARIABLE_KEY} 字符串。
然后在电子邮件准备期间,您应该将所有此类结构解析为它们的真实值。我不知道需要哪些变量,但在电子邮件准备期间您应该执行以下步骤:
- 从数据库加载电子邮件模板。
- 将所有
${VARIABLE_KEY} 替换为其真实值。
您可以使用正则表达式进行搜索和替换,也可以使用str_replace等函数。例如,如果您想将当前用户的电子邮件粘贴到您的电子邮件中(并且您的模型User 的表有一个电子邮件字段),那么您可以创建变量:${user.name},然后用简单的手动替换它str_replace函数:
$variables['${user.name}'] = Auth::user()->email;
str_replace(array_keys($variables), array_values($variables), $yourEmailTemplateBody);
您也可以通过相同的方法进行替换,不仅在电子邮件模板正文中,而且在电子邮件主题中。
然后你必须创建你自己的类来扩展 Laravel Illuminate\Mail\Mailable 类。在这个类中你应该定义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_NAME} 构造创建更复杂的语法,例如,VARIABLE_NAME 可以是 PHP 或 Laravel 表示法中的方法定义,即:SomeClass::someStaticMethod。您可以检测到这种情况并通过Laravel Service Container 解决SomeClass。也可以是object.field 表示法,例如user.email,其中user 是当前的Auth::user()。
但是在这种情况下要小心:如果您将授予所有用户使用此变量编辑电子邮件模板的能力,您应该过滤字段或可用方法和调用类,以防止执行任何可用类的任何方法您的电子邮件模板或防止显示私人信息。
您可以阅读有关编写邮件的内容in Laravel documentation