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