如何在ZF2中禁用布局和视图渲染器?

时间:2013-08-02 10:38:12

标签: zend-framework zend-framework2

如何在Zend Framework 2.x中禁用布局和视图渲染器?我阅读文档,无法得到任何答案在谷歌我找到答案Zend 1.x和它的

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

但它在Zend Framework 2.x中不再起作用了。我需要为Ajax请求禁用视图渲染器和布局。

任何帮助都会很棒。

3 个答案:

答案 0 :(得分:35)

只需在控制器中使用setTerminal(true)即可禁用布局。

此处记录了此行为:Zend View Quick Start :: Dealing With Layouts

示例:

<?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'
    ],
],

答案 1 :(得分:3)

您可以将此添加到操作的结尾:

return $this->getResponse();

答案 2 :(得分:3)

关于上述答案的更多信息...我在动态输出不同类型的文件时经常使用它: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;

不呈现视图,仅发送指定的内容和标题。