【发布时间】:2017-10-20 01:24:27
【问题描述】:
我正在编写一个 PHP/MYSQL SaaS 应用程序,我目前正在开发电子邮件功能(使用 Swift)。我计划将电子邮件模板保存到 MySQL 数据库(每个租户都可以自定义它们)。但是,我还需要在模板中包含动态数据(“合并标签”,如名字和姓氏)。我尝试简单地将{$test} 存储在数据库中,但这不起作用。从 MySQL 中提取数据以将变量合并到文本中,然后再将其传递给 Swift 之后,我需要做些什么吗?
【问题讨论】:
我正在编写一个 PHP/MYSQL SaaS 应用程序,我目前正在开发电子邮件功能(使用 Swift)。我计划将电子邮件模板保存到 MySQL 数据库(每个租户都可以自定义它们)。但是,我还需要在模板中包含动态数据(“合并标签”,如名字和姓氏)。我尝试简单地将{$test} 存储在数据库中,但这不起作用。从 MySQL 中提取数据以将变量合并到文本中,然后再将其传递给 Swift 之后,我需要做些什么吗?
【问题讨论】:
我不熟悉 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);
这里的主要想法是,您将用一个实际值替换具有特定语法(例如{%VALUE%})的占位符。如何生成 $search 和 $replace 变量取决于您。
这将输出如下内容:
你好,福,
谨此通知您,发票 #123456 可用于 2017-05-19.
谢谢你,巴尔
【讨论】: