【问题标题】:Zend Framework 3 Rendering HTML For HTML EmailZend Framework 3 为 HTML 电子邮件渲染 HTML
【发布时间】:2018-02-16 03:31:18
【问题描述】:
有什么方法可以在控制器中获取视图的 html 内容吗?
我正在尝试从 ZF3 发送 html 电子邮件,但是,我还没有找到任何将 html 内容获取到控制器的方法。
我使用了控制器渲染方法,
$render = new PHPRenderer(); $render->render();
但是在上面的代码和加载视图之后代码停止执行。
我需要将 HTML 内容设置为电子邮件正文。
【问题讨论】:
标签:
php
zend-framework
zend-framework3
zend-view
zend-servicemanager
【解决方案1】:
您只需要使用ViewRenderer 服务。因此,只需将此服务传递给您的控制器,然后在您想要呈现视图时调用它。
示例:
我假设您的控制器名称是SendEmailController。所以在Factory你需要检索ViewRenderer服务,然后把它传递给控制器
use Zend\ServiceManager\Factory\FactoryInterface;
use Interop\Container\ContainerInterface;
class SendEmailControllerFactory implements FactoryInterface
{
public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
{
$viewRenderer = $container->get('ViewRenderer');
$sendEmailController = new SendEmailController($viewRenderer);
return $sendEmailController;
}
}
以及控制器中的代码
use Zend\Mvc\Console\Controller\AbstractConsoleController;
use Zend\View\Model\ViewModel;
use Zend\View\Renderer\RendererInterface as RendererInterface;
class SendEmailController extends AbstractConsoleController
{
protected $viewRenderer;
/**
* @param RendererInterface $viewRenderer
*/
public function __construct(RendererInterface $viewRenderer)
{
$this->viewRenderer = $viewRenderer;
}
public function exampleAction()
{
$view = new ViewModel();
$view->setTemplate('path/to/template.phtml');
$html = $this->getViewRenderer()->render($view);
// @todo attach this $html to mail MimePart
}
}