Ajax 如何在zend framework 2中禁用渲染视图?

Ajax 如何在zend framework 2中禁用渲染视图?,ajax,zend-framework2,Ajax,Zend Framework2,我想使用一些ajax,但我不知道如何使用与zend framework 2中的setNoRender()相同的函数来禁用渲染视图 如何在zend framework 2中禁用渲染视图?如果您使用的是JSON,请查看视图的JsonStrategy,然后从控制器返回JsonModel。看这个 或者,您可以从控制器返回响应,并跳过整个视图层: public function testAction() { $response = $this->getResponse(); $res

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


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

如果您使用的是JSON,请查看视图的
JsonStrategy
,然后从控制器返回
JsonModel
。看这个

或者,您可以从控制器返回
响应
,并跳过整个视图层:

public function testAction()
{
    $response = $this->getResponse();
    $response->setStatusCode(200);
    $response->setContent('foo');
    return $response;
}   
  • 要禁用视图,请执行以下操作:

    public function myactionAction()
    {
        // your code here ...
        return false;
    }
    
“return false”将禁用视图,而不是布局!为什么?因为接受的类型是:

  • 视图模型
  • 排列
  • 空的
因此“false”将禁用该视图

  • 要禁用布局和视图,请返回响应对象:

    public function myactionAction()
    {
        // your code here ...
        return $this->response;
    }
    
  • 要禁用布局,请执行以下操作:

    public function myactionAction()
    {
        // your code here ...
        $view = new ViewModel();
        $view->setTerminal(true);
        return $view;
    }
    
$view=新视图模型();
$view->setTerminate(true)

正确的和简单的解决方案

public function testAction()
{
    $data = array(
        'result' => true,
        'data' => array()
    );
    return $this->getResponse()->setContent(Json::encode($data));
}
详细信息:

我找到了一些答案

虽然
$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();

这很有帮助。非常感谢,只是一个简短的通知。在Zend Framework 2.2中,$response->setBody('foo')是$response->setContent('foo');另一个类似的问题有更详细的答复。请参阅ajax解决方案:它不是$view->setTerminate(true);其$view->setTerminal(true);回答得很好。我更新了方法调用,因为Beniston正确地指出了一个输入错误。我的大多数操作都需要禁用布局。有没有一种方法可以从视图策略中设置它,以避免重复上面的代码?这是一个很好的答案,但是为什么返回响应对象会禁用布局和视图?这很奇怪。对于一个真正正确的解决方案,首先设置头:公共函数testAction{$response->getHeaders()->addHeaderLine('Content-Type','application/json');return$response->setContent(json::encode($data));}它是$view->setTerminal(true);事实上也许API会随着时间的推移而改变
...
use Zend\View\Model\JsonModel;

public function myAction() {
    ...

    $view = new JsonModel($myArray);
    $view->setTerminal(true);
    return $view;
}