【问题标题】:How do I call a function before every email send?在每封电子邮件发送之前如何调用函数?
【发布时间】:2015-10-05 21:24:29
【问题描述】:

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

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

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

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

通常我会将这种代码粘贴在视图文件控制器中,但电子邮件视图文件没有控制器。我已经尝试在某处将beforeEmail() 设为静态函数并在每个视图文件中调用它,但这看起来很混乱和错误(它让我在视图文件中调用函数,并在 50 多个文件中重复代码)。

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

【问题讨论】:

标签: php email cakephp cakeemail


【解决方案1】:

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

不起作用的事情:

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

-创建自定义传输 - 在呈现电子邮件后调用传输。

-将代码放入通用布局文件中 - 布局在呈现电子邮件的视图文件之后呈现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    相关资源
    最近更新 更多