我正在编写一个 PHP/MYSQL SaaS 应用程序,目前正在开发电子邮件功能(使用 Swift)。我计划将电子邮件模板保存到 MySQL 数据库(每个租户都可以自定义它们)。但是,我还需要在模板中包含动态数据(“合并标签”,例如名字和姓氏)。我尝试简单地将 {$test}
存储在数据库中,但这不起作用。从 MySQL 提取数据以将变量合并到文本中,然后再将其传递给 Swift 后,我需要做些什么吗?
最佳答案
我不熟悉 Swift 库,但快速浏览一下文档并没有发现任何有关解析消息以插入变量的信息。这意味着您可能需要自己执行此操作。
您可以这样做的一种方法是提出您自己的(任意)语法来保存变量在消息中的位置。例如,您可能想使用 {%VAR_NAME%}
或其他内容。
因此您可以保存模板,例如:
Hello {%recipient_name%},
This is to inform you that invoice #{%invoice_num%} is available as of {%invoice_date%}.
Thank you, {%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 变量取决于您。
这将输出如下内容:
Hello Foo,
This is to inform you that invoice #123456 is available as of 2017-05-19.
Thank you, Bar
关于php - 如何在 PHP/MySQL 应用程序中创建合并标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44078090/