我可以渲染视图而不在zend框架2中的动作控制器中返回它吗?

Ild*_*dar 7 php zend-framework2

现在我这样做:

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

问题是我想在$ 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);    
}
Run Code Online (Sandbox Code Playgroud)

但是没有方法render().在ZF1中,我可以呈现视图:

$view = new Zend_View($data);
$html = $view->render($templateName);
Run Code Online (Sandbox Code Playgroud)

我怎么能在ZF2中做到这一点?

Wet*_*eef 28

试试这个:

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


Ign*_*ual 14

补充答案,包括布局......

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);
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 不要在控制器中使用$ this-> getServiceLocator(),它已被弃用且不好用.使用工厂注入ViewRenderer (3认同)