2013-08-02 52 views
20

如何禁用Zend Framework 2.x中的布局和视图渲染器?我阅读文档并不能得到任何期待在谷歌的答案我找到答案的Zend 1.x和它的如何在ZF2中禁用布局和查看渲染器?

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

但它不是在Zend框架2.x的工作更多的我需要禁用视图渲染器和Ajax请求的布局。

任何帮助将是伟大的。

回答

32

只需在控制器中使用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; 

和h ERE返回JSON的动作例:

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

编辑:

不要忘记添加ViewJsonStrategymodule.config.php文件,以允许控制器返回JSON。谢谢@Remi!

'view_manager' => [ 
    'strategies' => [ 
     'ViewJsonStrategy' 
    ], 
], 
+3

不要忘了将这个'strategies'=>数组( 'ViewJsonStrategy', )添加到你的config.php中http://akrabat.com/zend-framework-2/returning-json-from -a-zf2-controller-action/ –

+0

是的,你是对的。我刚刚编辑了我的答案。谢谢。 – edigu

+0

如果我们想用json编码返回viewModel,我们应该怎么做? –

3

您可以添加到您的结束动作:

return $this->getResponse(); 
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; 

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