我具有被渲染经由布局一些内容的动作。

其实我是想在电子邮件中发送此输出。什么是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();

我不能给你一个超详细的答案,但如果你想完整的输出(包括布局),我想你想要写你的电子邮件功能作为一个动作助手,并在该执行postDispatch钩插入所述Zend_Controller_Action->调度()循环。

请参阅 http://nethands.de/download/zenddispatch_en.pdf 为全Zend框架调度过程概述

如果您不需要包含在电子邮件内容的布局,那么你可以在多点做到这一点,包括使用上下文切换,如你所提到的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top