20

$this->_helper->viewRenderer->setNoRender(); or (true)いつも言っているように、ZF2でビューを無効にするのに苦労しています

PHP Fatal error:  Call to a member function setNoRender() on a non-object in ../module/Location/src/Location/Controller/LocationController.php on line 190
4

9 に答える 9

62

ビューを完全に無効にするには、コントローラ アクション内から Response オブジェクトを返す必要があります。

<?php

namespace SomeModule\Controller;

use Zend\Mvc\Controller\ActionController,
    Zend\View\Model\ViewModel;

class SomeController extends ActionController
{
    public function someAction()
    {
        $response = $this->getResponse();
        $response->setStatusCode(200);
        $response->setContent("Hello World");
        return $response;
    }   
}

レイアウトを無効にして、このアクションのビュー モデル テンプレートのみをレンダリングするには、次のようにします。

public function anotherAction()
{
    $result = new ViewModel();
    $result->setTerminal(true);

    return $result;
}
于 2012-03-26T10:48:04.113 に答える
4

ZF2 は大部分が開発中であり、現在の動作を保証することはできません。ZF2 が安定した状態になったときに動作するようになるでしょう。

ただし、最近、Zend\Mvc の新しいビュー レイヤーがマージされ、ビュー関連の情報を含むビュー モデルをレンダリング ビューに返すオプションが提供されました。ビューのレンダリングを無効にするには、応答を直接返すことでディスパッチをショートカットできるため、ビューはまったくレンダリングされません。

public function somethingAction () 
{
    // Do some intelligent work

    return $this->getResponse();
}
于 2012-02-23T13:22:51.133 に答える
3

レイアウトのみを無効にしただけだと思います

$viewModel = new ViewModel();
$viewModel->setTerminal(true);

return $viewModel;

jsonをビューファイルにエコーします...

于 2012-10-14T01:59:38.743 に答える
3

レイアウトを無効にする簡単な解決策を見つけました。私の中でajaxAction

public function ajaxAction()
{   
     if ( $this->getRequest()->isXmlHttpRequest() ) {

          $this->layout( 'layout/ajax-layout' );

     }
}

そして、\module\Application\view\layout\ajax-layout.phtml

<?php echo $this->content; ?>
于 2012-10-05T09:57:18.433 に答える
0
public function testAction()
{   
    return false;
}

単純に false を返します。

于 2013-05-14T06:05:14.323 に答える
0

メソッドで '' を返すだけで、View テンプレートが自動ロードされません

public function goAction()
{   
    return '';
}
于 2012-03-24T23:46:27.937 に答える
-1

$this->_helperZF2 では使用できませんが、ビューを無効にするには次のようにします。

$this->broker("ViewRenderer")->setNoRender();

また

$this->broker->load("ViewRenderer")->setNoRender();
于 2012-02-08T13:37:21.733 に答える