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 回答