Как мне вызвать функцию перед каждой отправкой электронной почты?
У меня есть около 50 различных шаблонов электронной почты, текст которых изменяется динамически в зависимости от того, кто является получателем. Вместо того, чтобы создавать разные шаблоны для каждого возможного случая и включать аналогичную логику для десятков различных файлов контроллера, я хочу включить некоторые переключения в каждом шаблоне и применить переменную, определяющую регистр, к каждому письму.
Например, типичный шаблон может выглядеть так:
<? if ($case) { ?>
<p> text variation 1 </p>
<? } else { ?>
<p> text variation 2 </p>
<? } ?>
$case
будет установлен функцией beforeEmail($to_address)
это делает все вычисления для случаев, основанных на электронной почте получателей. Эти расчеты одинаковы для каждого письма. Как я могу получить beforeEmail()
звонить каждый раз при отправке электронного письма? Или точнее, куда мне положить beforeEmail()
функционировать?
Обычно я вставляю этот вид кода в контроллер файлов представления, но у файлов представления электронной почты нет контроллера. Я играл с созданием beforeEmail()
где-то статическая функция, и она вызывается в каждом файле представления, но это просто кажется грязным и неправильным (это оставляет мне вызовы функций внутри файлов представления и дублирующий код в более чем 50 файлах).
Изменить: я также попытался установить $case
переменная в файле макета, но оказывается, что макеты загружаются ПОСЛЕ файла представления электронной почты, поэтому переменные, установленные внутри макета, нельзя использовать в файле представления.
1 ответ
В случае, если у кого-то есть подобная проблема, я заканчивал модификацией основного метода send() библиотек CakeEmail. Хотя это и не идеально, это был единственный способ получить желаемое поведение (без повсеместного создания дубликата кода).
Вещи, которые не работают:
-Callbacks / events - Класс CakeEmail не предлагает обратные вызовы.
-Создание пользовательского транспорта - Транспорты вызываются после того, как электронная почта отрисована.
- Помещение кода в общий файл макета - Макеты отображаются после отображения файла представления электронной почты.