在 Zend Framework 2 中发送电子邮件时,我想使用视图脚本模板,这样我就可以为各种电子邮件模板利用布局。这个想法是我有一个布局,它具有共享标记并在某处回显内容。布局通常是如何工作的。为此,我尝试将子视图模型添加到我的布局视图模型并使用PhpRenderer
.
public function someMethod() {
$child = new ViewModel();
$child->setTemplate('test-template');
$layout = new ViewModel();
$layout->setTemplate('email-layout');
$layout->addChild($child, 'content');
$phpRenderer = new \Zend\View\Renderer\PhpRenderer();
$phpRenderer->setCanRenderTrees(true);
$resolver = new \Zend\View\Resolver\TemplateMapResolver();
$resolver->setMap($this->serviceLocator->get('ViewTemplateMapResolver'));
$phpRenderer->setResolver($resolver);
$output = $phpRenderer->render($layout);
}
布局视图脚本:
Hello from the e-mail layout script!
<?php echo $this->content; ?>
发生的情况是只有布局的内容存储在布局视图脚本中$output
和内部。$this->content
NULL
我想要做的是将 HTML 存储在一个字符串中,以便我可以通过电子邮件发送它。我实例化了一个子视图模型,它表示我想在布局中呈现的视图脚本。然后我实例化布局视图模型并添加子视图模型。然后我创建了一个 PhpRenderer 并向其中添加一个TemplateMapResolver
,这样它将使用模板映射来解析模板。最后,我调用了render
以PhpRenderer
aViewModel
作为其第一个参数的方法。我已将这两个模板添加到我的template_map
配置中,并且模板映射设置正确,名称和路径正确。
问题是我在它的渲染方法中看不到任何子视图的处理。这让我想,如果我PhpRenderer
错误地使用了这个类,也许这就是它不起作用的原因。我已经检查了嵌套视图模型的文档,并且我正在做同样的事情,除了不从控制器操作返回视图模型。如果我$layout
从控制器操作返回,它可以工作。
如果我查看Zend\View\View
's render方法,我可以看到它呈现子视图。好像我不能使用PhpRenderer
我想要的东西。但是我可以用Zend\View\View
这个吗?该render
方法不返回任何内容,但会触发一些事件。我对事件管理器还不太熟悉,所以我不确定如果使用这种方法,我如何/是否可以捕获输出。听响应事件是否明智?我必须检查我猜是哪个视图呈现(或者在完成我的工作后分离我的听众)。我不知道这样有没有好处。
任何想法都非常受欢迎。谢谢!