【问题标题】:Substitute variables of a template body email from database by specific information in CakePHP用 CakePHP 中的特定信息替换数据库中模板正文电子邮件的变量
【发布时间】:2016-01-25 20:37:02
【问题描述】:

想象一下这种情况,我有一个名为“message_templates”的表,其结构如下:-

id
subject
body

body 值在哪里:-

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

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

有人可以帮助我吗?

【问题讨论】:

  • preg_replace / str_replace 可能是最好的方法。

标签: php cakephp email-templates cakeemail


【解决方案1】:

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

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

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

【讨论】:

  • 好的。我会尝试。但有时我不会拥有所有令牌。我需要检查正文消息中是否存在令牌或 str_replace 不关心它?
  • 如果令牌不存在于正文消息中,它会跳过它而没有问题。我对我一直在开发的网站使用了类似的方法,以允许客户能够编辑系统发送的电子邮件内容,其中包含客户详细信息的令牌。效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-01
  • 2020-12-07
  • 2022-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多