2013-08-02 3 views
20

Zend Framework 2.xでレイアウトとビューレンダラーを無効にする方法はありますか?私はマニュアルを読み、すべての答えはグーグルで探して取得することはできません私は、Zend 1.xのに答えを発見し、それはZF2でレイアウトとビューレンダラーを無効にする方法は?

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

だが、それは、Zend Frameworkの2.xでは、それ以上働いていませんAjaxリクエストのビューレンダラーとレイアウトの両方を無効にする必要があります。

助けがあれば助かります。

答えて

32

コントローラでsetTerminal(true)を使用してレイアウトを無効にするだけです。

この動作はここに文書化:Zend View Quick Start :: Dealing With Layouts

例:

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

をあなたの代わりに.phtmlファイルをレンダリングするJSONレスポンスを送信する場合は、JsonRendererを使用するようにしてください:

この行を追加します。クラスのトップに:

use Zend\View\Model\JsonModel; 

とh ERE JSONを返すアクションの例:

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

EDIT:

は、コントローラがJSONを返すことができるようにあなたのmodule.config.phpファイルにViewJsonStrategyを追加することを忘れないでください。ありがとう@レミ!

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

http://akrabat.com/zend-framework-2/returning-json-fromから、あなたのconfig.phpに、=>配列( 'ViewJsonStrategy'、 )この '戦略' を追加することを忘れないでください。 -a-zf2-controller-action/ –

+0

はい、そうです。私はちょうど私の答えを編集しました。ありがとうございました。 – edigu

+0

jsonエンコーディングでviewModelを返す場合はどうすればいいですか? –

3

あなたの行動の最後にこれを追加することができます動的にファイルの種類を出力する際に​​上記の回答に

return $this->getResponse(); 
3

少し詳細情報を...私は、多くの場合、これを使用する:JSON、XML 、pdfなど...これは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; 

ビューはレンダリングされず、指定されたコンテンツとヘッダーのみが送信されます。

関連する問題