16

いくつかのajaxを使用したいのですが、zendフレームワーク2のsetNoRender()と同じように関数を使用してレンダリングビューを無効にする方法がわかりません。

zendフレームワーク2でレンダリングビューを無効にする方法は?

4

6 に答える 6

56
  • ビューを無効にするには:

    public function myactionAction()
    {
        // your code here ...
        return false;
    }
    

「returnfalse」は、レイアウトではなくビューを無効にします。なぜ?受け入れられるタイプは次のとおりです。

  • ViewModel
  • 配列
  • ヌル

したがって、「false」はビューを無効にします。

  • レイアウトと表示を無効にするには、応答オブジェクトを返します。

    public function myactionAction()
    {
        // your code here ...
        return $this->response;
    }
    
  • レイアウトを無効にするには:

    public function myactionAction()
    {
        // your code here ...
        $view = new ViewModel();
        $view->setTerminal(true);
        return $view;
    }
    
于 2012-09-25T08:20:46.023 に答える
17

JSONを使用している場合は、ビューを確認して、コントローラーからをJsonStrategy返しJsonModelます。この記事を参照してください。

または、コントローラーからを返すことができ、Responseビューレイヤー全体がスキップされます。

public function testAction()
{
    $response = $this->getResponse();
    $response->setStatusCode(200);
    $response->setContent('foo');
    return $response;
}   
于 2012-09-08T18:07:59.687 に答える
9

これを行うための適切でシンプルなソリューション

public function testAction()
{
    $data = array(
        'result' => true,
        'data' => array()
    );
    return $this->getResponse()->setContent(Json::encode($data));
}

詳細:http ://cmyker.blogspot.com/2012/11/zend-framework-2-ajax-return-json.html

于 2012-11-15T21:21:54.450 に答える
3

私はいくつかの答えを見つけました。

$this->layout()->getLayout()新しく選択されたレイアウトの名前/パスを返しますが...レイアウトは次のコマンドのいずれでも変更されません...

コントローラ内

$this->getLocator()->get('view')->layout()->setLayout('layouts/ajax.phtml');
$this->getLocator()->get('view')->layout()->setLayout('ajax');
$this->getLocator()->get('view')->layout()->disableLayout();

ビューPHTMLファイル内

$this->layout()->setLayout('layouts/ajax.phtml');
$this->layout()->setLayout('ajax');
$this->layout()->disableLayout();
于 2012-12-04T21:18:02.553 に答える
0

$ view = new ViewModel(); $ view-> setTerminate(true);

于 2012-10-21T21:42:12.907 に答える
0
...
use Zend\View\Model\JsonModel;

public function myAction() {
    ...

    $view = new JsonModel($myArray);
    $view->setTerminal(true);
    return $view;
}
于 2016-06-09T06:30:22.213 に答える