用CakePHP中的特定信息替换数据库中模板正文的变量


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

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

id
subject
body

,其中主体值为:-

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

什么是最好的方式来代替这些变量在CakePHP -我知道它,CakeEmail有一个配置参数叫"模板",但事实并非如此,因为我的模板(体列)来自数据库。也许在发送前使用preg_replacesprintf ?

有人能帮帮我吗?

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

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

您可以将$body传递给CakeEmail并正常发送电子邮件