我正在努力学习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测试结果不断出现并且不起作用。感谢您提供任何建议。
答案 0 :(得分: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
是否存在?
答案 1 :(得分:0)
尝试这样的事情......
$response = $this->getResponse();
$response->setStatusCode(200);
$jsonArray = {.....}
$response->setBody($jsonArray);
return $response;
并确保将ViewJsonStrategy添加到模块配置中。