Can I render view without returning it in action controller in zend framework 2?

若如初见. 提交于 2019-12-20 23:21:24

问题


Now I am doing so:

public function indexAction() {
    ...
    $view = new ViewModel(array(
        'foo' => 'bar',
    ));
    return $view;
}

The problem is that I want to do something after $view rendering and before layout rendering:

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

But there is no method render(). In ZF1 I could render view:

$view = new Zend_View($data);
$html = $view->render($templateName);

How can I do that in ZF2?


回答1:


Try this:

public function IndexAction()
{
    ...
    $viewRender = $this->getServiceLocator()->get('ViewRenderer');
    $html = $viewRender->render($viewModel);
    ...
}



回答2:


Complementing the answer, with layout included...

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


来源:https://stackoverflow.com/questions/15559441/can-i-render-view-without-returning-it-in-action-controller-in-zend-framework-2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!