用 CakePHP 中的特定信息替换来自数据库的模板正文电子邮件的变量

Substitute variables of a template body email from database by specific information in CakePHP

想象一下这个场景,我有一个名为 "message_templates" 的 table,其结构如下:-

id
subject
body

其中 body 值为:-

<p>ID: ${PROJECT_ID} </p>
<p>Project's Title: ${PROJECT_TITLE} </p>

在 CakePHP 中替换这些变量的最佳方法是什么 - 我知道,CakeEmail 有一个名为 "template" 的配置参数,但事实并非如此,因为我的模板(正文列) 来自数据库。也许在发送前使用 preg_replacesprintf

有人可以帮助我吗?

您只需要使用 str_replace 并提供一个标记数组和一个替换数组:-

$body = str_replace(
    [
        '${PROJECT_ID}',
        '${PROJECT_TITLE}'
    ], 
    [
        '1',
        'Foo bar'
    ],
    $data['MessageTemplate']['body']
);

然后您可以将 $body 传递给 CakeEmail 并照常发送电子邮件。