2013-03-21 11 views
6

Teraz robie tak:Czy mogę renderować widok bez zwracania go w kontrolerze akcji w Zend Framework 2?

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

Problemem jest to, że chcę zrobić coś po $ widoku renderingu i przed renderowania układ:

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

Ale nie ma metody render(). W ZF1 mogłem wyświetlić widok:

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

Jak mogę to zrobić w ZF2?

Odpowiedz

24

Spróbuj tego:

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

Doskonałe, można to zrobić w tym układzie też? –

+0

+1 Bardzo pomocne, dziękuję – AlexP

14

Uzupełniając odpowiedź, z układu zawartego ...

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

Nie używaj $ this-> getServiceLocator() wewnątrz kontrolera, jest przestarzałe i złe praktyki. Użyj fabryki, aby wstrzyknąć ViewRenderer –