20

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

我找到了一个禁用布局的简单解决方案。在我的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 回答
3

我会说只是禁用了布局

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

return $viewModel;

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

于 2012-10-14T01:59:38.743 回答
0

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

public function goAction()
{   
    return '';
}
于 2012-03-24T23:46:27.937 回答
0

公共函数 indexAction() {

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


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





    return $res;

}
于 2012-05-14T11:16:17.010 回答
0
public function testAction()
{   
    return false;
}

简单地返回假。

于 2013-05-14T06:05:14.323 回答
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;
于 2016-03-11T01:29:29.753 回答
-1

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

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

或者

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