web-dev-qa-db-ja.com

ZF2で動作中のビューを無効にする

ZF2 $this->_helper->viewRenderer->setNoRender(); or (true)でビューを無効にするのに苦労していますが、いつものように運がありません。

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

コントローラーアクション内からビューを完全に無効にするには、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;
}
61
Rob Allen

ZF2は開発が進んでおり、現在の動作を保証することはできません。ZF2が安定状態に達したときの動作になります。

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

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

    return $this->getResponse();
}
4
Jurian Sluiman

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

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

return $viewModel;

そしてあなたのjsonをあなたのビューファイルにエコーします...

3
Kdecom

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

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

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

     }
}

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

<?php echo $this->content; ?>
3
rab

コンソールモデルを使用してこれを行うか、任意に実行を強制終了できます。

<?php

namespace SomeModule\Controller;

use Zend\Mvc\Controller\ActionController;
use Zend\View\Model\ConsoleModel; // if use ConsoleMode
use Zend\View\Model\JsonModel; // if use JSON

class SomeController extends ActionController
{
    public function someAction() {

      return new ConsoleModel(array(
        'message' => 'Hello World',
      ));

    }
    // Json Method
    public function jsonAction() {

      return new JsonModel(array(
        'message' => 'Hello World',
      ));

    }

    // This is really exaggerated, but it is quite effective.

    public function killAction() {
      echo 'Hello World';
      exit;
    }
}

ビューでの使用:some.phtml

<?php
echo $message;

json.phtml

<?php
echo $message;
0
Neftalí Yagua
public function testAction()
{   
    return false;
}

単にfalseを返します。

0
morphois

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

public function goAction()
{   
    return '';
}
0
Meabed

パブリック関数indexAction(){

    $news = $this->em->getRepository('Admin\Model\News');
    foreach ($news->findAll() as $new) {


        $res = $this->getResponse()->setContent($new->toXml());
    }





    return $res;

}
0
Sina Miandashti