2013-08-02 3 views
20

Wie kann ich das Layout und den Renderer in Zend Framework 2.x deaktivieren? Ich habe gelesen, Dokumentation und kann keine Antworten in google gefunden i Antwort auf Zend 1.x und es istWie kann ich das Layout und den Renderer in ZF2 deaktivieren?

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

Aber es funktioniert nicht mehr in Zend Framework 2.x. Suche erhalten Ich muss View-Renderer und Layout für Ajax-Anfragen deaktivieren.

Jede Hilfe wäre großartig.

Antwort

32

Verwenden Sie einfach setTerminal(true) in Ihrem Controller, um das Layout zu deaktivieren.

Dieses Verhalten hier dokumentiert: Zend View Quick Start :: Dealing With Layouts

Beispiel:

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

Wenn Sie JSON-Antwort senden möchten, anstatt eine .phtml Datei von Rendering, versuchen JsonRenderer zu verwenden:

Fügen Sie diese Zeile an die Spitze der Klasse:

use Zend\View\Model\JsonModel; 

und h ere eine Aktion Beispiel, das JSON zurückgibt:

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

EDIT:

Vergessen Sie nicht ViewJsonStrategy auf Ihre module.config.php Datei hinzufügen, um Controller zu ermöglichen JSON zurückzukehren. Danke @Remi!

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

Vergessen Sie nicht, dieses 'strategies' => array ( 'ViewJsonStrategy', ) zu Ihrer config.php hinzuzufügen von http://akrabat.com/zend-framework-2/returning-json-from -a-zf2-controller-action/ –

+0

Ja, du hast Recht. Ich habe gerade meine Antwort bearbeitet. Vielen Dank. – edigu

+0

Wenn wir ViewModel mit JSON Encoding zurückgeben wollen, was sollen wir tun? –

3

Sie diese bis zum Ende Ihrer Aktion hinzufügen:

return $this->getResponse(); 
3

Etwas mehr Informationen über die oben genannte Antwort ... ich dies häufig verwenden, wenn verschiedene Arten von Dateien ausgeben, dynamisch: json, xml , pdf, etc ... Dies ist das Beispiel der Ausgabe einer XML-Datei.

// 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; 

Die Ansicht wird nicht gerendert, und nur der angegebene Inhalt und die Header werden gesendet.

Verwandte Themen