Reputation: 21
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.
Upvotes: 1
Views: 1079
Reputation: 2794
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
}
}
Upvotes: 3