2010-02-12 3 views
3

Я использую Symfony 1.4 почтовик где строить различные биты, необходимые для электронной почты, а затем отправить его с помощью:Электронная почта в Symfony 1.4 mailer?

$this->getMailer()->composeAndSend($sender, $recipient, $subject, $body); 

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

$body = 'Your username is '.$username.' and this is the email body.'; 

кто-нибудь знает элегантный способ хранения/организации различных органов по электронной почте, вместо того, чтобы кодировать их, как это мне прямо в действие? У меня будет много шаблонов электронной почты, а также их на нескольких языках.

Я нашел старый учебник Askeet, обсуждающий это, но он кажется несколько устаревшим с новой интеграцией SwiftMailer, основанной на symfony 1.4, и сама документация SwiftMailer не очень понятна.

спасибо.

ответ

5

Я хранил электронные письма в качестве файла шаблона и передал их через sfPartialView. Например. в действии:

$view = new sfPartialView($this->getContext(), $this->getModuleName(), $this->getActionName(), 'confirmation_mail'); 
$view->setTemplate('_confirmation_mail.php'); 

// values can be set e.g. by setAttibute 
$view->setAttribute('name', $name); 

$body = $view->render() 

Шаблоны тела расположены в папке шаблона модуля, но я уверен, что вы можете как-то изменить это и, например, поместите все шаблоны электронной почты в одну папку, если хотите.

+0

Это прекрасно, спасибо, именно то, что мне нужно. И да, я думаю, вы можете просто использовать $ view-> setTemplate («../../ emails/email») с относительным путем для их хранения в одном месте. – Tom

5

Как насчет того, чтобы использовать собственный метод, доступный внутри sfAction.

$ this-> getPartial ('partial_name'); который работает как частичные помощники для ваших шаблонов.

+0

@ Хенрик: Наконец-то обзавелся различными методами. Этот ответ действительно более простой способ, позволяющий передавать переменные, а также позволять хранить тела электронной почты в одном месте: $ body = $ this-> getPartial ('emails/someEmailPartial', array ('var1' => $ var1, 'var2' => $ var2)); – Tom