Php 在电子邮件中使用查看模板。如何更轻松地应用模板?

Php 在电子邮件中使用查看模板。如何更轻松地应用模板?,php,zend-framework2,Php,Zend Framework2,我已经能够加载一个视图模板,并使用它来创建电子邮件的正文。代码与此处的答案类似: 但现在我希望将这段代码移植到一个模块中,帮助我的应用程序的其余部分发送电子邮件。我想我想让所有电子邮件使用视图变得尽可能简单/透明 因此,基本问题是,如何设置代码以接受呈现模板和发送电子邮件所需的信息? 我已经在服务定位器中保存了我的交通信息,发送电子邮件也可以。我主要关心的是模板解析器所需的混乱代码: $view = new PhpRenderer(); $resolver = new TemplateMapR

我已经能够加载一个视图模板,并使用它来创建电子邮件的正文。代码与此处的答案类似:

但现在我希望将这段代码移植到一个模块中,帮助我的应用程序的其余部分发送电子邮件。我想我想让所有电子邮件使用视图变得尽可能简单/透明

因此,基本问题是,如何设置代码以接受呈现模板和发送电子邮件所需的信息?

我已经在服务定位器中保存了我的交通信息,发送电子邮件也可以。我主要关心的是模板解析器所需的混乱代码:

$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\u manager'=>“template\u map'
并绕过创建
新解析器()的需要?在这种情况下,我可以设置电子邮件代码以接受应该在该映射中的命名模板

'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',
        ),

您只需通过
ServiceManager
访问默认的
viewrenderer

 $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);

差不多就是这样。显然,尽管本例中已剥离了具体的邮件处理,但根据您的描述,您主要关注的是另一个问题。

这对渲染器肯定有帮助。如果此代码位于模型内部,而不是控制器,并且是从另一个模块调用的,那么我需要做什么才能在
setTemplate()
中引用正确的模板?嗯,这些模板通常是基于每个模块的,所以我认为只要模块设置正确,您不必担心从模型中添加视图路径。要从您的模型访问视图渲染器,请将
视图渲染器
插入到您的模型中,或将
服务管理器
插入模型使用
服务定位器接口
,但问题是我的通信模块应保存电子邮件模板,但是,如果我试图使用应用程序模块中的模型,我是否可以访问适当的模板?顺便说一句,我同时在测试和询问。看来我的最后一条评论没有什么问题,从不同的模块运行模型代码仍然允许我使用通信模块中的模板。谢谢。叶: