我有一个通过布局呈现一些内容的操作。
我实际上想通过电子邮件发送此输出。在 Zend 框架中实现这一目标的最佳方法是什么?
我知道我需要使用该Zend_Mail
组件来发送电子邮件,但我不清楚如何将我的操作的输出附加到Zend_Mail
.
我已经阅读了 ContextSwitch 动作助手,我认为这可能是合适的,但我仍然不相信。
我还是 Zend 框架的新手。我习惯于使用输出缓冲之类的技术来捕获输出,我认为这在 Zend 中不是正确的方法。
我有一个通过布局呈现一些内容的操作。
我实际上想通过电子邮件发送此输出。在 Zend 框架中实现这一目标的最佳方法是什么?
我知道我需要使用该Zend_Mail
组件来发送电子邮件,但我不清楚如何将我的操作的输出附加到Zend_Mail
.
我已经阅读了 ContextSwitch 动作助手,我认为这可能是合适的,但我仍然不相信。
我还是 Zend 框架的新手。我习惯于使用输出缓冲之类的技术来捕获输出,我认为这在 Zend 中不是正确的方法。
从您的控制器:
// 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');
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();
}
当您调度动作时,您可以在插件的 postDispatch() 方法中捕获事件,您可以从所需的动作动态添加到堆栈中。因为您通过以下方式收到响应的内容
//in action
//...some php code
Zend_Controller_Front::getInstance()->registerPlugin(new My_Plugin());
//in plugin
$htmlCode = $this->_response->getBody();
我不能给你一个超级详细的答案,但是如果你想要完整的输出(包括布局),我想你想把你的电子邮件函数写成一个动作助手,并将它插入到 Zend_Controller_Action 的 PostDispatch 钩子中- >dispatch() 循环。
请参阅http://nethands.de/download/zenddispatch_en.pdf以获取完整的 Zend Framework Dispatch Process Overview。
如果您不需要电子邮件内容中包含的布局,那么您可以在很多时候执行此操作,包括使用上下文切换,正如您所提到的。