1

Is there any method for getting html content of a view in a controller? I am trying to send html email from ZF3,however, I have not find any method for fetching html content to controller.

I used controller render method,

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

But the code stop execution after above code and load view. I need to set HTML content to Email body.

Dolly Aswin
  • 2,684
  • 1
  • 20
  • 23
Intellect
  • 21
  • 5

1 Answers1

2

You just need to use ViewRenderer service. So, just passing this service to your controller, then call it if you want to render the view.

Example: I assume your controller name is SendEmailController. So in Factory you need to retrieve the ViewRenderer service, then pass it to controller

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;
    }
}

And code in the controller

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
    }

}
Dolly Aswin
  • 2,684
  • 1
  • 20
  • 23