Zend Framework:将视图作为JSON返回

时间:2014-03-16 17:01:42

标签: zend-framework

所以我的问题是:将响应的html作为JSON编码字符串返回的最佳方法是什么?

我知道有典型的json动作助手,但他们不符合我的需要。

如果请求是ajax请求,我需要的是一种将视图的完整html作为json字符串返回的方法。 因为我想更改我的应用程序只加载主容器的内容,我还需要在请求期间传递一些其他变量,我需要找到一种方法:)

也许有人已经有过一些经验!

3 个答案:

答案 0 :(得分:1)

我可以提出另一个解决方案:

1 - 在plugins目录中创建一个application目录 在此目录中,像这样创建插件POutput.php

<?php
class Application_Plugin_POutput extends Zend_Controller_Plugin_Abstract
{
    public function postDispatch(Zend_Controller_Request_Abstract $request)
    {           
        if (Zend_Registry::get('Output_Json'))
            Zend_Layout::getMvcInstance()->setLayout('layout_json');
    }
}

2 - 像这样创建一个新的布局“layout_json.phtml”:

<?php 
echo $this->json($this->layout()->content); ?>

您可以看到documentation有关此帮助程序的选项

3 - 像bootstrap那样调用插件:

protected function _initPlugins(){
    $front = Zend_Controller_Front::getInstance();
    $front->registerPlugin(new Application_Plugin_POutput());
}

4 - 例如,在bootstrap中,像这样启动变量Output_Json

protected function _initJson(){
    Zend_Registry::set('Output_Json', true); // true for Json output, False for Html output
}

使用此方法,您无需更改所有控制器。 ;)

我希望能回答你的问题。 :)

答案 1 :(得分:0)

我不知道最好的方法是什么,但是我会把你给我。

要将json发送到ajax调用,我在控制器中执行此操作。我禁用布局,查看,然后发送json。

例如发送数组,我这样做:

public function fooAction() {
    $this->disableLayout();
    $this->_helper->viewRenderer->setNoRender(true);
    ...
    //get array $auth with value $authentification
    $auth = array('authentification' => $authentification);

    return $this->_helper->json($auth);
}

它运作良好:)

答案 2 :(得分:0)

如果您想要一个与您的模型层交互的Json响应,您应该使用它:

return new JsonModel(array);

如果你需要一个简单的响应,你应该使用Response类,如下所示:

$response   = new Response();
$response->getHeaders()->addHeaders(
    array(
        'Content-type' => 'application/json'
    ));
$response->setContent($yourContent);

return $response;