在ZF2中禁用视图

时间:2012-02-08 12:59:16

标签: zend-framework2

我正在努力禁用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

9 个答案:

答案 0 :(得分:61)

要完全禁用视图,请在控制器操作中返回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;
}

答案 1 :(得分:4)

ZF2正在大力开发中,不能保证现在的工作方式,ZF2达到稳定状态时的工作方式。

但是,最近合并了Zend \ Mvc中的新视图层,它提供了返回视图模型以及视图相关信息以呈现视图的选项。要禁用视图渲染,可以通过直接返回响应来快速调度,因此视图根本不会呈现。

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

    return $this->getResponse();
}

答案 2 :(得分: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; ?>

答案 3 :(得分:3)

我会说只是禁用了布局

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

return $viewModel;

并将您的json回显到您的视图文件中......

答案 4 :(得分:0)

只需在方法中返回'',它就不会自动加载视图模板

public function goAction()
{   
    return '';
}

答案 5 :(得分:0)

  

public function indexAction(){

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


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





    return $res;

}

答案 6 :(得分:0)

public function testAction()
{   
    return false;
}

简单地返回false。

答案 7 :(得分:0)

您可以使用控制台模型执行此操作,也可以任意终止执行。

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

答案 8 :(得分:-1)

$this->_helper在ZF2中不可用,但要禁用您可以执行的视图:

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

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