我一直在尝试在Cakephp 3.0.11中设置Ajax调用。 我按照这里的解释:http://book.cakephp.org/3.0/en/views/json-and-xml-views.html
Json在路由中启用(但我不确定它是否有用):
$routes->extensions(['json', 'xml', 'html']);
我在控制器中设置了我的例子:
$returnObject = new ObjectReturn();
$this->set('returnObject', $returnObject);
$this->set('_serialize', ['returnObject']);
但是当我打开ajax电话时,我得到了:
{
"message": "Template file \Pages\\score.ctp\ is missing.",
"url": "\/pages\/score",
"code": 500
}
如果我创建页面,他会使用default.ctp作为布局来渲染我一些html。这有什么不对?
非常感谢!
答案 0 :(得分:8)
要在cakephp 3应用程序中实现json / xml渲染视图,您需要在应用程序中编辑两个文件
编辑初始化函数看起来像这样
public function initialize() {
parent::initialize();
$this->loadComponent('RequestHandler');/*This line loads the required RequestHandler Component*/
}
编辑Router :: scope()看起来像这样
Router::scope('/', function ($routes) {
$routes->extensions(['json', 'xml', 'ajax']);
/*Other route definitions as already existing*/
}
现在可以通过将.xml添加到通常加载html的链接来添加.json或xml来加载json视图。
干杯
答案 1 :(得分:6)
如果您想强制每个响应(错误除外)为JSON(并跳过模板),您可以将此代码放入AppController.php
public function initialize()
{
parent::initialize();
$this->loadComponent('RequestHandler');
}
public function beforeRender(Event $event)
{
$this->RequestHandler->renderAs($this, 'json');
$this->response->type('application/json');
$this->set('_serialize', true);
}
这会加载RequestHandlerComponent,强制渲染为JSON,强制响应类型为JSON,并使用模板跳过。
本手册中的更多内容:http://book.cakephp.org/3.0/en/controllers/components/request-handling.html