如何在每封电子邮件发送前调用一个函数?

时间:2015-10-05 21:24:30

标签: php email cakephp cakeemail

我有大约50种不同的电子邮件模板,其文本根据收件人的身份动态变化。不是为每个可能的案例制作不同的模板,而是在几十个不同的控制器文件中包含类似的逻辑,我想在每个模板中包含一些案例切换,并将案例确定变量应用于每个电子邮件。

例如,典型的模板可能如下所示:

<? if ($case) { ?>
    <p> text variation 1 </p>
<? } else { ?>
    <p> text variation 2 </p>
<? } ?>

$case将由函数beforeEmail($to_address)设置,该函数根据收件人电子邮件执行案例的所有计算。每个电子邮件的这些计算都是相同的。每次发送电子邮件时如何才能调用beforeEmail()?或者更准确地说,我在哪里放置beforeEmail()函数?

通常我会在视图文件控制器中粘贴这种代码,但电子邮件视图文件没有控制器。我曾经在某处创建beforeEmail()静态函数并在每个视图文件中调用它,但这看起来很麻烦和错误(它让我在视图文件中调用函数,并在50多个文件中复制代码)

编辑:我也尝试在布局文件中设置$case变量,但事实证明在电子邮件视图文件之后加载了布局,因此在布局中设置的变量不能在视图文件中使用。

1 个答案:

答案 0 :(得分:0)

如果有人遇到类似问题,我最终修改了CakeEmail核心库send()方法。虽然它并不理想,但这是我能找到的唯一方法来获得我想要的行为(无需在任何地方创建重复的代码)。

不起作用的事情:

-Callbacks / events - CakeEmail类不提供回调。

- 创建自定义传输 - 在呈现电子邮件后,传输称为

- 在公共布局文件中输入代码 - 在呈现电子邮件的视图文件后,将显示的布局。