Как мне вызвать функцию перед каждой отправкой электронной почты?

У меня есть около 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 не предлагает обратные вызовы.

-Создание пользовательского транспорта - Транспорты вызываются после того, как электронная почта отрисована.

- Помещение кода в общий файл макета - Макеты отображаются после отображения файла представления электронной почты.

Другие вопросы по тегам