2009-09-30 7 views
41

Zendのドキュメントはこれではっきりしません。AJAXレスポンスを送信する際、Zend Frameworkがビュー/レイアウトをレンダリングしないようにするにはどうすればよいですか?

デフォルトでは、Zendは各コントローラアクションの最後に自動的にビューをレンダリングするという問題があります。あなたがレイアウトを使っているなら、なぜそうしないのですか?それはまたレンダリングします。これは通常のWebページでは問題ありませんが、AJAXの応答を送信するときには、すべてのことを望んでいません。どのようにZendがアクションごとに自動レンダリングするのを防ぐのですか?どんなアクション(複数可)の中から

+0

かコンテキストスイッチャーを使用してこの機能を実現することができます。 [この回答](http://stackoverflow.com/questions/1499322/mvc-how-to-ajax/1499947#1499947)を見てください。 –

答えて

90

コールこのコードは/ AJAX応答を送信しようとしているされています

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

これは、そのアクションのレイアウトエンジンを無効にし、そのアクションのレンダリングを自動表示をオフにし。あなたはAJAXの出力がどんなものであろうと、通常のビュー/レイアウトのことを心配することなく、乗り物のために送るようにすることができます。

16

あなたのAJAXは、JSONを返す場合は、JSONアクションヘルパーを使用することができます。

$this->_helper->json($data); 

このヘルパーは、あなたの$データをjson_encode JSONヘッダを持つ出力をし、最後に死ぬので、私たちはきれいなJSONは、アクションから返さ取得しますレイアウトやビューのレンダリングが不要です。

f.e.アクションの最後で)関数を私はちょうど-のために、AJAX

public function photosAction() { 

if ($this->getRequest()->getQuery('ajax') == 1 || $this->getRequest()->isXmlHttpRequest()) { 
    $params = $this->getRequest()->getParams(); 
    $result = false; 

    switch ($params['act']) { 
     case 'deleteImage': 
      //deleting something 
      ... 
      $result = true; //ok 
      break; 

     default : 
      $result = array('error' => 'Invalid action: ' . $params['act']); 
      break; 
     } 

    $this->_helper->json($result); 
} 

// regular action code here 
... 
} 
+0

ありがとう、これはレンダリングを無効にするために複数の行を入れなければならないことがはるかに良いです。 – mic

-1

さまざまなアクションのために複数のACLのチェックを回避するために始めアクションでこの構成を使用していますそれとも、単に金型を(置くことができ

public function someAction() 
{ 
    echo json_encode($data); 
    die(); 
} 
関連する問題