如何在 PHP/MySQL 应用程序中创建合并标签?

Dom*_*rby 3 php mysql email

我正在编写一个 PHP/MYSQL SaaS 应用程序,目前正在研究电子邮件功能(使用 Swift)。我计划将电子邮件模板保存到 MySQL 数据库(每个租户都可以自定义它们)。但是,我还需要在模板中包含动态数据(“合并标签”,如名字和姓氏)。我尝试简单地存储{$test}在数据库中,但这没有用。在将数据从 MySQL 中提取以将变量合并到文本中之后,我需要做些什么,然后再将其传递给 Swift?

小智 5

我不熟悉 Swift 库,但快速浏览文档并没有发现有关解析消息以插入变量的任何信息。这意味着您可能需要自己执行此操作。

您可能会这样做的一种方法是提出您自己的(任意)语法来保存消息中变量的位置。例如,您可能想要使用{%VAR_NAME%}什么。

所以你可以保存你的模板,比如:

你好{%recipient_name%},

这是为了通知您发票 #{%invoice_num%} 自 {%invoice_date%} 起可用。

谢谢你,{%sender_name%}

然后,假设模板存储在 中$email_body,您可以进行字符串替换(或者str_replace(),或者类似的东西preg_replace()。对于这么简单的事情,我不建议使用正则表达式搜索使事情陷入困境)。下面是一个示例,说明您可能会如何去做。您可以按照自己的意愿构建$search$replace数组,但我只是像这样布置它以提高人类可读性。

// Original body:
$email_body = "Hello {%recipient_name%},
               This is to inform you that invoice #{%invoice_num%} is available as of {%invoice_date%}.
               Thank you, {%sender_name%}";

// Easily readable input values
$values = array(
    'recipient_name'    => $db_value['recipient_name'],
    'invoice_num'       => $db_value['invoice_num'],
    'invoice_date'      => date("Y-m-d"),
    'sender_name'       => $_SESSION['user_name']
);

// Break it up into the search and replace arrays
$search = array();
$replace = array();
foreach ($values AS $index => $value)
{
    $search[] = "{%" . $index . "%}"; // Wrapping the text in "{%...%}"
    $replace[] = $value;
}

// Do the replacement
$email_body = str_replace($search, $replace, $email_body);
Run Code Online (Sandbox Code Playgroud)

这里的主要思想是您将{%VALUE%}使用具有实际值的特定语法(例如)替换占位符。如何生成 $search 和 $replace 变量取决于您。

这将输出如下内容:

你好傅,

这是为了通知您发票 #123456 于 2017 年 5 月 19 日可用。

谢谢你,酒吧