在ZF1我用下面的代码来呈现邮件正文:
// View erstellen
$view = new Zend_View();
// Layout erstellen
$layout = new Zend_Layout();
// HelperPath muss hier nochmals übergeben werden da es ein neues View Objekt ist.
$view->addHelperPath('Own/View/Helper', "Own_View_Helper_");
// ViewScript
$view->setScriptPath(APPLICATION_PATH . '/views/scripts/emails/');
// LayoutPath
$layout->setLayoutPath(APPLICATION_PATH . '/layouts/scripts/');
$layout->setLayout('layoutMail');
$layout->setView($view);
foreach ($assigns as $key => $value) {
$view->assign($key,$value);
}
$layout->content = $view->render($templateName);
return $layout->render();
我尝试了很多,但我无法实现ZF2此功能。 我实际的代码是这样的。 但它使用的标准布局,我不能在字符串中得到它。
public function mailAction()
{
$viewModel = new ViewModel();
$viewModel->setTemplate("zhorty/test");
$viewModel->setVariable('test', 'some value');
return $viewModel;
}
谢谢! 你的回答帮我!
我扩展的代码。 因此,我可以用一个布局模板为好。
$view = new \Zend\View\Renderer\PhpRenderer();
$resolver = new \Zend\View\Resolver\TemplateMapResolver();
$resolver->setMap(array(
'mailLayout' => __DIR__ . '/../../../../Application/view/layout/layout-mail.phtml',
'mailTemplate' => __DIR__ . '/../../../view/zhorty/test.phtml'
));
$view->setResolver($resolver);
$viewModel = new \Zend\View\Model\ViewModel();
$viewModel->setTemplate('mailTemplate')
->setVariables(array(
'test' => 'AlloVince'
));
$content = $view->render($viewModel);
$viewLayout = new \Zend\View\Model\ViewModel();
$viewLayout->setTemplate('mailLayout')
->setVariables(array(
'content' => $content
));
echo $view->render($viewLayout);
我的答案是基于user1986560的答案, 如何渲染插件Zend框架2自定义视图 。 我加入它,因为我觉得它使事情变得更容易实现。
我有一个电子邮件的布局和不同的内容文件。 布局可以重复使用,并添加不同的内容文件。
查看/电子邮件/ layout.phtml
<table>
<tr><td><img src="header.png" /></td></tr>
<tr><td><?= $this->content; ?></td></tr>
<tr><td><img src="footer.png" /></td></tr>
</table>
查看/电子邮件/ contact.phtml
<h1>Contact us email</h1>
</ br>
Name: <?= $this->name;?></ br>
Email: <?= $this->email;?></ br>
Message:<?= $this->message;?></ br>
在你的模块的conf,添加布局和不同内容的文件。 通过做这种方式,您可以使用视图助手。
module.config.php
'view_manager' => array(
'template_map' => array(
'email/layout' => __DIR__ . '/../view/email/layout.phtml',
'email/contact' => __DIR__ . '/../view/email/contact.phtml',
),
在你的控制器/动作 :
// View renderer
$renderer = $this->getServiceLocator()->get('Zend\View\Renderer\RendererInterface');
// Email content
$viewContent = new \Zend\View\Model\ViewModel(
array(
'name' => $name,
'email' => $email,
'message' => $message,
));
$viewContent->setTemplate('email/contact'); // set in module.config.php
$content = $renderer->render($viewContent);
// Email layout
$viewLayout = new \Zend\View\Model\ViewModel(array('content' => $content));
$viewLayout->setTemplate('email/layout'); // set in module.config.php
// Email
$html = new MimePart($renderer->render($viewLayout));
$html->type = 'text/html';
$body = new MimeMessage();
$body->setParts(array($html));
$message = new \Zend\Mail\Message();
$message->setBody($body);
希望我的博客文章的人会帮助你,它是关于如何使用Zend的\查看中的Zend \邮件模板,并在ZF2添加附件
它是由中国人写的,但我觉得刚才读的代码是非常明显的。 你也可以用谷歌翻译的帮助下阅读
对于sendig电子邮件我推荐以下模块: https://github.com/WasabiLib/Mail
该模块是基于所述ZF2消息并且将其配置为服务。 所以,你只需要调用的ServiceManager。
身体的方法是能够处理ZF2的ViewModels。 看下面的例子:
$mail = $this->getServiceLocator()->get("Mail");
$viewModel = new ViewModel(array('$yourVariable1' => 'yourContent1', $yourVariable2=>'yourContent2',...));
$viewModel->setTemplate("responsive");
$mail->setTo('recipient@domain.com');
$mail->setBody($viewModel);
$mail->send();
它是捆绑在一起,你可以自定义一个响应电子邮件模板。 你只需要在模块添加到application.config.php,你准备好去。
@ user1986560答案是不完整的,因为你必须需要一个像“URL”与路由器,有时是“基本路径”也需要一些基本的帮手。
下面是完整的代码 -
$myApp=Zend\Mvc\Application::init(require 'config/application.config.php');
$sm=$myApp->getServiceManager();
$view=new \Zend\View\Renderer\PhpRenderer();
$view->getHelperPluginManager()->setServiceLocator($sm);
$basePathX='/your-folder-from-where-you-want-to-run';
$request=$myApp->getRequest();
if($request instanceof \Zend\Http\PhpEnvironment\Request){
#die($request->getBasePath());
$basePathX=$request->getBasePath();
}
$basePath1=explode('/', $basePathX);
/* please fix this path as your requirement */
array_pop($basePath1);
$bsPath=implode('/', $basePath1).'/';
/* following line will fix your router path, it is important */
$myApp->getMvcEvent()->getRouter()->setBaseUrl($bsPath);
$basePath=new \Zend\View\Helper\BasePath();
$basePath->setBasePath($bsPath);
$view->getHelperPluginManager()->setService('basePath', $basePath);
$urlHlpr=new \Zend\View\Helper\Url();
$urlHlpr->setRouter($myApp->getMvcEvent()->getRouter());
$view->getHelperPluginManager()->setService('url', $urlHlpr);
$resolver=new \Zend\View\Resolver\TemplateMapResolver();
$resolver->setMap(array(
'wmsLayout' => APP_ROOT_PATH . 'module'.DS.'YourModule'.DS.'view'.DS.'layout'.DS.'layout1.phtml',
'layout/left-menu' => APP_ROOT_PATH . 'module'.DS.'YourModule'.DS.'view'.DS.'layout'.DS.'left-menu.phtml',
));
$view->setResolver($resolver);
$viewModel = new \Zend\View\Model\ViewModel();
$tmpltFileToLoad=__DIR__ . DS.'your-file-to-render.phtml';
$tmpltIdx='_'.md5($tmpltFileToLoad);
$resolver->add($tmpltIdx, $tmpltFileToLoad);
$viewModel->setTemplate($tmpltIdx)->setVariables(array(
'test' => 'shahadat hossain khan'
));
$content=$view->render($viewModel);
$viewLayout = new \Zend\View\Model\ViewModel();
$viewLayout->setTemplate('wmsLayout')->setVariables(array(
'content' => $content,
'anyOtherVariableForLayout'=>'layout variable value',
));
echo $view->render($viewLayout);
希望它能帮助我的人。