1

ビュー テンプレートを読み込んで、それを使用して電子メール メッセージの本文を作成することができました。コードは次の回答に似ています: How to render a mail template with layout in ZF2?

しかし今は、このコードをモジュールに移動して、アプリケーションの残りの部分が電子メールを送信できるようにしようとしています。すべてのメールでビューを使用できるように、できるだけ簡単/透過的にしたいと考えています。

基本的な質問は、テンプレートをレンダリングして電子メールを送信するために必要な情報を受け入れるようにコードを設定するにはどうすればよいかということです。

私はすでにトランスポート情報をサービスロケーター内に保持しており、電子メールの送信は正常に機能しています。私の主な関心事は、主にテンプレート リゾルバーに必要な厄介なコードです。

$view = new PhpRenderer();
$resolver = new TemplateMapResolver();
$resolver->setMap(array(
                'mail' => __DIR__ . '/../../../view/communication/email/new-project.phtml'
        ));
$view->setResolver($resolver);

新しいモジュール内に保持されている電子メールのすべての *.phtml を使用しても問題ありません。アプリケーションからアドホック メールを送信する必要はありません (アプリケーション内部の通信を使用します)。

module.config.php 'view_manager' => 'template_map'を使用して を作成する必要を回避する方法はありnew resolver()ますか? その場合、そのマップにあるはずの名前付きテンプレートを受け入れるように電子メール コードを設定できます。

'view_manager' => array(
        'display_not_found_reason' => true,
        'display_exceptions'       => true,
        'doctype'                  => 'HTML5',
        'not_found_template'       => 'error/404',
        'exception_template'       => 'error/index',
        'template_map' => array(
            'layout/layout'             => __DIR__ . '/../view/layout/layout.phtml',
            'application/index/index'   => __DIR__ . '/../view/application/index/index.phtml',
            'error/404'                 => __DIR__ . '/../view/error/404.phtml',
            'error/index'               => __DIR__ . '/../view/error/index.phtml',
        ),
4

1 に答える 1

3

viewrenderer経由でデフォルトにアクセスするだけですServiceManager

 $viewRenderer = $this->getServiceLocator()->get('viewrenderer');

 $mailView = new ViewModel();
 $mailView->setTemplate('my-namespace/controller/mailtemplate.phtml');

 $mailView->setVariables(array(
    //k=>v paired data
 ));

 $renderedOutput = $viewRenderer->render($mailView);

 $mail->setBody($renderedOutput);

そして、それはほとんどそれです。明らかに、具体的なメール処理はこの例から取り除かれていますが、説明を考えると、主に別の問題を見ているからです。

于 2013-04-08T11:19:17.753 に答える