0

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

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

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

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

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

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

4

1 回答 1

0

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

不起作用的事情:

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

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

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

于 2015-10-14T04:27:02.503 回答