Я с тобой Джастин.
У меня есть серия моделей, которые запускают электронные письма на основе определенных действий, которые могут исходить от пользователей, администраторов и сценариев оболочки для автоматизированных процессов.
Гораздо проще централизовать ответ по электронной почте в модели (например, когда запись заказа «отменена»), чем переписать письмо в нескольких местах.
Кроме того, у меня есть автоматизированные процессы в моделях, которые обрабатывают некоторую базовую «логику», каскадную с другими моделями hasOne, ownTo или hasMany, которые являются бизнес-правилами.
Например, сценарий оболочки crontabbed вызывает Offer-> expire () для «истечения срока действия» предложения, которое затем вызывает Offer-> make () для создания другого предложения, но если это невозможно, он вызывает Request-> expire () для истечения срока действия исходного запроса. Электронные письма должны отправляться первому получателю предложения с истекшим сроком действия, любым новым получателям предложения и / или запрашивающей стороне, если срок ее действия истекает. Они могут быть вызваны оболочкой crontabbed, пользователями или администраторами, которые могут управлять запросами и предложениями вручную. Все с использованием разных контроллеров или интерфейсов.
Это то, что я сделал и могу назвать в моделях и контроллерах:
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