使用Zend Action Helper ContextSwitch创建自定义的JSON响应对象

9

我通常会将编码后的json对象附加到响应主体中,但现在有一种情况需要使用ContextSwitch动作助手。

我有一个Zend_Form,需要三个不同的响应上下文:

  1. html - 正常渲染表单为HTML格式,包含布局。
  2. html-partial - 一个ajax "get"请求,只渲染表单为HTML格式。
  3. json - 一个ajax "post"请求,返回任何表单验证错误信息。

对于每个上下文,我都有3个视图脚本。虽然两个HTML上下文可以使用相同的视图脚本,但我还没有弄清楚是否可能。

  • form.phtml
  • form.html.phtml
  • form.json.phtml

HTML上下文视图工作正常,但是JSON视图未被捕获。最佳方法是覆盖默认的JSON POST回调行为或将自定义编码对象传递给响应主体?


我发现在contextSwitch上设置setAutoJsonSerialization(false)可以渲染视图脚本,同时保持上下文Content-Type头。 - gawpertron
2个回答

6
个人而言,我不使用“View”来生成JSON内容。在我的init()中,我有如下代码:
$ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext->setAutoJsonSerialization(false)
    ->addActionContext('index', array('html', 'json'))
    ->initContext();

在我的indexAction()中:
if ( true === $this->isAjaxJson() ) {
    $this->_helper->json(
        array(
            'response' => $myResponse,
            'message' => $myMesage
        )
    );
    return;
}

希望这能帮到您。

是的,那大致上就是我所做的。不过我使用了一个单独的视图脚本来处理响应。 - gawpertron

0
这可能会有所帮助: $this->_helper->json->sendJson($data); 同时, $data=array('data1'=>'val1','data2'=>'val2');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接