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

У меня есть около 50 различных шаблонов электронной почты, текст которых изменяется динамически в зависимости от того, кто является получателем. Вместо того, чтобы создавать разные шаблоны для каждого возможного случая и включать аналогичную логику для десятков различных файлов контроллера, я хочу включить некоторые переключения в каждом шаблоне и применить переменную, определяющую регистр, к каждому письму.

Например, типичный шаблон может выглядеть так:

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

$case будет установлен функцией beforeEmail($to_address) это делает все вычисления для случаев, основанных на электронной почте получателей. Эти расчеты одинаковы для каждого письма. Как я могу получить beforeEmail() звонить каждый раз при отправке электронного письма? Или точнее, где я должен положить beforeEmail() функционировать?

Обычно я вставляю этот вид кода в контроллер файлов представления, но у файлов представления электронной почты нет контроллера. Я играл с созданием beforeEmail() статическая функция где-то и вызывать ее в каждом файле представления, но это просто кажется грязным и неправильным (это оставляет мне вызовы функций внутри файлов представления и дублирующий код в более чем 50 файлах).

Изменить: я также попытался установить $case переменная в файле макета, но оказывается, что макеты загружаются ПОСЛЕ файла представления электронной почты, поэтому переменные, установленные внутри макета, нельзя использовать в файле представления.

0

Решение

В случае, если у кого-то есть подобная проблема, я заканчивал тем, что модифицировал основной метод send () библиотек CakeEmail. Хотя это и не идеально, это был единственный способ получить желаемое поведение (без повсеместного создания дубликата кода).

Вещи, которые не работают:

-Обратные вызовы / события — класс CakeEmail не предлагает обратных вызовов.

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector