23

How can i disable layout and view renderer in Zend Framework 2.x? I read documentation and can't get any answers looking in google i found answer to Zend 1.x and it's

$this->_helper->viewRenderer->setNoRender(true);
$this->_helper->layout->disableLayout();

But it's not working any more in Zend Framework 2.x. I need to disable both view renderer and layout for Ajax requests.

Any help would be great.

4

3 回答 3

37

只需setTerminal(true)在您的控制器中使用来禁用布局。

此处记录了此行为:Zend View 快速入门 :: 处理布局

例子:

<?php
namespace YourApp\Controller;

use Zend\View\Model\ViewModel;

class FooController extends AbstractActionController
{
    public function fooAction()
    {
    $viewModel = new ViewModel();
    $viewModel->setVariables(array('key' => 'value'))
              ->setTerminal(true);

    return $viewModel;
    }
}

如果您想发送 JSON 响应而不是渲染 .phtml 文件,请尝试使用 JsonRenderer:

将此行添加到类的顶部:

use Zend\View\Model\JsonModel;

这里是一个返回 JSON 的动作示例:

public function jsonAction()
{
    $data = ['Foo' => 'Bar', 'Baz' => 'Test'];
    return new JsonModel($data);
}

编辑:

不要忘记添加ViewJsonStrategy到您的module.config.php文件以允许控制器返回 JSON。谢谢@Remi!

'view_manager' => [
    'strategies' => [
        'ViewJsonStrategy'
    ],
],
于 2013-08-02T11:29:39.053 回答
4

您可以将其添加到操作的末尾:

return $this->getResponse();
于 2013-08-02T12:22:16.053 回答
4

关于上述答案的更多信息......我在动态输出不同类型的文件时经常使用它:json,xml,pdf等......这是输出XML文件的示例。

// In the controller
$r = $this->getResponse();

$r->setContent(file_get_contents($filePath)); //

$r->getHeaders()->addHeaders(
    array('Content-Type'=>'application/xml; charset=utf-8'));

return $r;

不渲染视图,只发送指定的内容和标题。

于 2014-10-14T15:41:07.007 回答