Рендеринг действия в электронную почту HTML в Zend Framework - PullRequest
5 голосов
/ 12 октября 2009

У меня есть действие, которое отображает некоторый контент через макет.

Я действительно хочу отправить этот вывод по электронной почте. Каков наилучший способ добиться этого в Zend Framework?

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

Я немного читал о помощнике действий ContextSwitch и думаю, что это может быть уместно, но я все еще не убежден.

Я все еще новичок в Zend Framework. Я привык использовать такие приемы, как буферизация вывода, для захвата вывода, что я не считаю правильным способом сделать это в Zend.

Ответы [ 4 ]

8 голосов
/ 12 октября 2009

с вашего контроллера:

// do this if you're not using the default layout
$this->_helper->layout()->disableLayout();

$this->view->data = $items;

$htmlString = $this->view->render('foo/bar.phtml');

Если вы делаете это из класса, который не является экземпляром Zend_Controller_Action, вам, возможно, придется сначала создать экземпляр Zend_view, чтобы сделать это:

$view = new Zend_view();

// you have to explicitly define the path to the template you're using
$view->setScriptPath(array($pathToTemplate)); 

$view->data = $data;

$htmlString = $view->render('foo/bar.phtml');
2 голосов
/ 11 октября 2012
public static function sendMail($data = array(), $template = ''){
    $html = new Zend_View();
    $html->setScriptPath(APPLICATION_PATH . '/modules/default/views');

    // assign valeues
    if(count($data['Assigni'])){
        foreach($data['Assigni'] as $assign){
            $html->assign($assign['key'], $assign['value']);
        }
    }        
    // create mail object
    $mail = new Zend_Mail('utf-8');

    // render view //'scripts/newsletter/emailtemplate.phtml'
    $bodyText = $html->render($template);

    $mail->addTo($data['To']);
    $mail->setSubject($data['Subject']);
    $mail->setFrom($data['From'], $data['FromName']);
    $mail->setBodyHtml($bodyText);
    $mail->send();
}
1 голос
/ 12 октября 2009

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

//in action
//...some php code
Zend_Controller_Front::getInstance()->registerPlugin(new My_Plugin());
//in plugin
$htmlCode = $this->_response->getBody();
0 голосов
/ 12 октября 2009

Я не могу дать вам супер-подробный ответ, но если вам нужен полный вывод (включая макет), я думаю, что вы хотите написать свою функцию электронной почты в качестве помощника Action и вставить ее в хук PostDispatch цикл Zend_Controller_Action-> dispatch ().

См. http://nethands.de/download/zenddispatch_en.pdf для полного обзора процесса отправки Zend Framework.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...