Zend Framework 3 рендеринг HTML для электронной почты HTML

Есть ли способ для получения содержимого HTML представления в контроллере? Я пытаюсь отправить html-письмо из ZF3, однако я не нашел способа извлечь html-контент в контроллер.

Я использовал метод рендеринга контроллера,

$ render = new PHPRenderer (); $ Render-> Render();

Но код прекращает выполнение после приведенного выше кода и загружает представление. Мне нужно установить содержимое HTML в тело письма.

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
    }

}
Другие вопросы по тегам