2013-08-02 15 views
20

Come posso disabilitare il layout e visualizzare il renderer in Zend Framework 2.x? Ho letto la documentazione e non può ottenere alcuna risposta alla ricerca in google ho trovato risposta a Zend 1.x ed èCome disabilitare il layout e visualizzare il renderer in ZF2?

$this->_helper->viewRenderer->setNoRender(true); 
$this->_helper->layout->disableLayout(); 

Ma non sta funzionando più in Zend Framework 2.x. Devo disabilitare sia il rendering della vista che il layout per le richieste Ajax.

Qualsiasi aiuto sarebbe fantastico.

risposta

32

Basta usare setTerminal(true) nel controller per disabilitare il layout.

Questo comportamento documentato qui: Zend View Quick Start :: Dealing With Layouts

Esempio:

<?php 
namespace YourApp\Controller; 

use Zend\View\Model\ViewModel; 

class FooController extends AbstractActionController 
{ 
    public function fooAction() 
    { 
    $viewModel = new ViewModel(); 
    $viewModel->setVariables(array('key' => 'value')) 
       ->setTerminal(true); 

    return $viewModel; 
    } 
} 

Se si desidera inviare la risposta JSON invece di rendere un file .phtml, tenta di utilizzare JsonRenderer:

Aggiungi questa linea all'inizio della classe:

use Zend\View\Model\JsonModel; 

eh ere un esempio di azione che restituisce JSON:

public function jsonAction() 
{ 
    $data = ['Foo' => 'Bar', 'Baz' => 'Test']; 
    return new JsonModel($data); 
} 

EDIT:

Non dimenticate di aggiungere ViewJsonStrategy al file module.config.php per consentire ai controllori di ritorno JSON. Grazie a @Remi!

'view_manager' => [ 
    'strategies' => [ 
     'ViewJsonStrategy' 
    ], 
], 
+3

Non dimenticare di aggiungere questo 'strategie' => array ( 'ViewJsonStrategy', ), a voi config.php da http://akrabat.com/zend-framework-2/returning-json-from -a-zf2-controller-action/ –

+0

Sì, hai ragione. Ho appena modificato la mia risposta. Grazie. – edigu

+0

se vogliamo restituire viewModel con la codifica json cosa dovremmo fare? –

3

È possibile aggiungere questo alla fine della tua azione:

return $this->getResponse(); 
3

Leggermente più informazioni sulla risposta di cui sopra ... Io uso questo spesso quando l'output di diversi tipi di file in modo dinamico: JSON, XML , pdf, ecc ... Questo è l'esempio dell'output di un file XML.

// In the controller 
$r = $this->getResponse(); 

$r->setContent(file_get_contents($filePath)); // 

$r->getHeaders()->addHeaders(
    array('Content-Type'=>'application/xml; charset=utf-8')); 

return $r; 

La vista non viene visualizzata e vengono inviati solo il contenuto e le intestazioni specificati.

Problemi correlati