2013-03-21 7 views
6

Ora sto facendo così:È possibile eseguire il rendering della vista senza restituirla nel controller di azioni in zend framework 2?

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

Il problema è che io voglio fare qualcosa dopo $ vista di rendering e prima del rendering di layout:

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

Ma non esiste un metodo render(). In ZF1 è possibile visualizzare il rendering:

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

Come posso farlo in ZF2?

risposta

24

Prova questo:

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

eccellente, si potrebbe fare questo incluso il layout troppo? –

+0

+1 Molto utile, grazie – AlexP

14

A complemento della risposta, con il layout incluso ...

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

Non utilizzare $ this-> getServiceLocator() all'interno del controller, è deprecato e non funziona correttamente. Utilizzare una fabbrica per iniettare ViewRenderer –

Problemi correlati