Zend Mail - Где его создать? - PullRequest
2 голосов
/ 10 мая 2011

Я использую шаблон проектирования Data Mapper / Gateway.

Итак, у меня есть:

Mapper; Шлюз; Доменный объект (в основном с геттерами и сеттерами); Контроллер; Вид.

Мой вопрос: где мне создать экземпляр Zend Mail? Я полагаю, что точка зрения, очевидно, не подлежит сомнению, и шлюз также не должен рассматриваться.

Контроллер должен содержаться в чистоте, поэтому:

Показать наш доменный объект?

Если в нашей форме будет поле выбора, которое будет извлекать данные из базы данных, то, возможно, Mapper будет наиболее подходящим местом для создания экземпляра Zend Mail?

Спасибо

Ответы [ 2 ]

2 голосов
/ 10 мая 2011

Хммм? Ну, с Zend вы можете настроить Zend_Mail в вашем загрузчике или с помощью файла application.ini или другого файла конфигурации. Вот как я сейчас настраиваю свою. Для dev я напишу письма в файл, а для тестирования я отправлю почту через реальный почтовый сервер.

Я создаю экземпляр своего экземпляра Zend_Mail в классе, который я называю Mail_Service. Этот класс почтовой службы создаст экземпляр Zend_Mail внутри, когда ему нужно будет отправить письмо, и будет использовать существующий экземпляр Zend_Mail, если он был создан и необходимо отправить больше писем.

У него есть методы, которые будут отправлять мне заранее определенные письма. Например,


Mail_Service->sendWelcomeEmail( $userInfo ) 

OR


Mail_Service->sendActivationEmail( $userInfo )

Скажем, например, что мой контроллер получает запрос на создание нового пользователя, тогда весь поток моего кода будет выглядеть так

</p> <pre> //in the controller //process form from browser somehow UserAccountService->createNewUser( $userInfo ); ///////////////// /// Within the user account service public function createNewUser( $userInfo ) { $userMapper->createNewUser( $userInfo ); $preferencesMapper->createDefaultPreferencesForUser( $userInfo ); MailService->sendWelcomeEmail( $userInfo ); } </pre> <p>

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

Надеюсь, это поможет.

1 голос
/ 10 мая 2011

Я всегда храню код, который отправляет почту, в моих контроллерах.

Модель - база данных / бизнес-логика

Вид - html / уровень представления

Контроллер - код, который выполняетвещи.

...