2013-03-21 4 views
6

Jetzt mache ich so:Kann ich die Ansicht rendern, ohne sie in action controller in zend framework 2 zurückzugeben?

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

Das Problem ist, dass ich etwas nach $ view Rendering und vor Layout-Rendering tun: (keine Methode machen

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

Aber es gibt). In ZF1 könnte ich anzeigen:

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

Wie kann ich das in ZF2 tun?

Antwort

24

Try this:

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

ausgezeichnet, können Sie dies mit dem Layout zu tun? –

+0

+1 Sehr hilfreich, danke – AlexP

14

Ergänzung der Antwort, mit Layout inklusive ...

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

Verwenden Sie $ this-> getServiceLocator() nicht im Controller, es ist veraltet und schlechte Praxis. Verwenden Sie eine Factory, um den ViewRenderer zu injizieren –