16

我想使用一些 ajax,但我不知道如何使用与 zend 框架 2 中的 setNoRender() 相同的函数来禁用渲染视图。

如何在 zend 框架 2 中禁用渲染视图?

4

6 回答 6

56
  • 要禁用您的视图:

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

“return 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 = 新的 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 回答