4

我正在努力学习ZF2。我有一个使用 Ajax 获取一些数据的页面。ZF2 函数应返回 JSON 字符串。

<?php
namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\View\Model\JsonModel;

class DocumentsController extends AbstractActionController {

    public function indexAction() {

    }

    public function getTreeDataAction() {
        $json = new JsonModel(array(
                    'title' => 'Some Title'
                ));
        return $json;
    }

}

但我不断收到这个致命错误:

( ! ) Fatal error: Uncaught exception 'Zend\View\Exception\RuntimeException' with message 'Zend\View\Renderer\PhpRenderer::render: Unable to render template "application/documents/get-tree-data"; resolver could not resolve to a file' in ../vendor/ZF2/library/Zend/View/Renderer/PhpRenderer.php on line 451

我一直在寻找这个错误以及在 ZF2 中进行 ajax 调用的最佳方法,但是 ZF1 或 ZF2 测试版的结果不断出现并且不起作用。感谢您提供的任何建议。

4

2 回答 2

16

嗯,这个错误几乎意味着它试图访问默认的渲染策略,这很奇怪......你有没有将 JsonStrategy 添加到你的 view_manager 中?

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

此外,在您的 ajax 调用中设置正确的接受标头以仅接受application/json内容类型是一个好主意。有了这一套,它应该真的可以工作了。出于好奇,确实modules/__NAMESPACE__/view/__namespace__/documents/get-tree-data.phtml存在吗?

于 2012-09-27T05:06:35.453 回答
0

尝试这样的事情......

$response = $this->getResponse();
$response->setStatusCode(200);

$jsonArray = {.....}
$response->setBody($jsonArray);

return $response;

并确保您也将 ViewJsonStrategy 添加到您的模块配置中。

于 2012-10-21T21:51:23.410 回答