我和你在一起,贾斯汀。
我有一系列模型,它们根据某些操作触发电子邮件,这些操作可能来自用户、管理员和用于自动化流程的 shell 脚本。
在模型中集中电子邮件响应(例如当订单记录被“取消”时)比在多个位置重写电子邮件要容易得多。
此外,我在模型中有自动化流程,这些流程处理一些核心“逻辑”,这些“逻辑”级联到其他 hasOne、belongsTo 或 hasMany 模型,这些模型是 biz 规则。
例如,一个 crontabbed 的 shell 脚本调用 Offer->expire() 来“过期”一个 Offer,然后调用 Offer->make() 来制作另一个 Offer,但如果它不能,那么它调用 Request->expire() 来'过期'原始请求。电子邮件必须发送给第一个过期的报价接收者、任何新的报价接收者和/或发送给请求者(如果它过期)。这些可以由 crontabbed shell 或用户或可以手动管理请求和提议的管理员调用。都使用不同的控制器或接口。
这就是我所做的并且可以在模型和控制器中调用它:
if(empty($this->MailsController)) {
App::import('Controller','Mails');
$this->MailsController = new MailsController();
$this->MailsController->constructClasses();
$this->MailsController->Email->startup($this->MailsController);
}
现在,我几乎可以从任何地方调用它,并通过模型内部的以下调用集中所有逻辑,以查找哪些数据()、生成哪些电子邮件、将其发送给谁等:
$this->MailsController->orderMail($user_id,$this->id,$mode);
由于所有电子邮件逻辑基本上都是由模型通过 MailsController 间接调用的,因此我将尝试 rscherer 的代码。
希望这会有所帮助,oh4real