ZF2中没有模板渲染的正确JSON输出

时间:2013-12-08 10:52:13

标签: php zend-framework zend-framework2

有没有办法让JSON输出正常工作? (替代 $ this-> _heleper-> json-> ZF1中的SendJSON()

    public function ajaxSectionAction() {
return new JsonModel(array(
    'some_parameter' => 'some value',
    'success' => true,
));
}

因为它会抛出错误:

> Fatal error: Uncaught exception 'Zend\View\Exception\RuntimeException'

> with message 'SmartyModule\View\Renderer\SmartyRenderer::render:

> Unable to render template ...

1 个答案:

答案 0 :(得分:10)

Rob Allen撰写了一篇关于它的文章: Returning JSON from a ZF2 controller action

如果要返回JsonModel,则必须将JsonStrategy添加到view_manager:

//module.config.php
return array(
    'view_manager' => array(
        'strategies' => array(
           'ViewJsonStrategy',
        ),
    ),
)

然后从动作控制器返回一个JsonModel:

public function indexAction()
{
    $result = new JsonModel(array(
        ...
    ));

    return $result;
}

另一种方法,您也可以尝试使用此代码返回每个数据而不进行视图渲染:

$response = $this->getResponse();
$response->setStatusCode(200);
$response->setContent('some data');
return $response;

您可以尝试$response->setContent(json_encode(array(...)));或:

$jsonModel = new \Zend\View\Model\JsonModel(array(...));
$response->setContent($jsonModel->serialize());