6

レイアウトを介して一部のコンテンツをレンダリングするアクションがあります。

私は実際にこの出力を電子メールで送信したいと思います。Zend Frameworkでこれを実現するための最良の方法は何ですか?

メールを送信するためにコンポーネントを使用する必要があることはわかってZend_Mailいますが、アクションの出力をに添付する方法がわかりませんZend_Mail

ContextSwitchアクションヘルパーについて読んだことがありますが、それは適切かもしれないと思いますが、それでも確信が持てません。

私はまだZendFrameworkを初めて使用します。私は、出力バッファリングなどの手法を使用して出力をキャプチャすることに慣れていますが、これはZendでこれを行う正しい方法ではないと思います。

4

4 に答える 4

8

コントローラから:

// 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');
于 2009-10-12T09:20:08.107 に答える
2
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();
}
于 2012-10-11T12:14:53.297 に答える
1

アクションをディスパッチするとき、プラグインのpostDispatch()メソッドでイベントをキャッチできます。これは、目的のアクションからスタックに動的に追加できます。その中であなたは応答の内容を受け取る

//in action
//...some php code
Zend_Controller_Front::getInstance()->registerPlugin(new My_Plugin());
//in plugin
$htmlCode = $this->_response->getBody();
于 2009-10-12T06:15:14.047 に答える
0

非常に詳細な答えを出すことはできませんが、完全な出力(レイアウトを含む)が必要な場合は、アクションヘルパーとして電子メール関数を記述し、Zend_Controller_ActionのPostDispatchフックに挿入することをお勧めします- > dispatch()ループ。

Zend Frameworkのディスパッチプロセスの概要については、http://nethands.de/download/zenddispatch_en.pdfを参照してください。

電子メールのコンテンツにレイアウトを含める必要がない場合は、前述のように、コンテキストスイッチを使用するなど、さまざまな時点でこれを行うことができます。

于 2009-10-12T04:38:42.327 に答える