Теперь я делаю так:
public function indexAction() { ... $view = new ViewModel(array( 'foo' => 'bar', )); return $view; }
Проблема в том, что я хочу что-то сделать после рендеринга $ view и перед рендерингом макета:
public function indexAction() { ... $view = new ViewModel(array( 'foo' => 'bar', )); $layout = $this->layout(); $layout->content = $view->render(); ... // here I want to do some important action ... $html = $layout->render(); return $this->getResponse()->setContent($html); }
Но метод render () отсутствует. В ZF1 я мог бы сделать вид:
$view = new Zend_View($data); $html = $view->render($templateName);
Как это сделать в ZF2?
Попробуй это:
public function IndexAction() { ... $viewRender = $this->getServiceLocator()->get('ViewRenderer'); $html = $viewRender->render($viewModel); ... }
Дополняя ответ, с включенным макетом …
public function IndexAction() { ... $viewRender = $this->getServiceLocator()->get('ViewRenderer'); $layout = new ViewModel(); $layout->setTemplate("layout/main"); $layout->setVariable("content", $viewRender->render($viewModel)); $html = $viewRender->render($layout); ... }