Cakephp 3:Json 渲染视图不起作用
Posted
技术标签:
【中文标题】Cakephp 3:Json 渲染视图不起作用【英文标题】:Cakephp 3 : Json render View not working 【发布时间】:2015-11-11 17:21:08 【问题描述】:我一直在尝试在 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
如果我创建页面,他会为我呈现一些 html,并使用 default.ctp 作为布局。这里有什么问题?
非常感谢!
【问题讨论】:
您是否按照here 的说明在控制器中加载了RequestHandlerComponent
?
顺便说一句,要启用json
使用扩展和请求处理的视图,您的网址需要使用.json
扩展,例如/pages/score.json
。
您好,感谢您的回答。我已经升级到 Cake 的最新版本,现在它可以工作了。也许一个错误是正确的。谢谢你的回答!
这在您升级时有效,原因如下:As of 3.1.0 AppController, in the application skeleton automatically adds '_serialize' => true to all XML/JSON requests. You will need to remove this code from the beforeRender callback if you want to use view files.
from book.cakephp.org/3.0/en/views/…
【参考方案1】:
要在你的 cakephp 3 应用程序中实现一个 json/xml 渲染视图,你需要在你的应用程序中编辑两个文件
-
AppController.php
将初始化函数编辑成如下所示
public function initialize()
parent::initialize();
$this->loadComponent('RequestHandler');/*This line loads the required RequestHandler Component*/
-
routes.php(在您的配置文件夹下)
编辑 Router::scope() 使其看起来像这样
Router::scope('/', function ($routes)
$routes->extensions(['json', 'xml', 'ajax']);
/*Other route definitions as already existing*/
您现在可以通过添加 .json 来加载 json 视图,或者通过将 .xml 添加到通常加载您的 html 的链接中来加载 xml。
干杯
【讨论】:
【参考方案2】:如果您想将每个响应(错误除外)强制转换为 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
【讨论】:
非常感谢!!我疯狂地输出json!好像设置$this->set('_serialize', $vars);
还不够!!提示:也适用于 CakePHP 2!以上是关于Cakephp 3:Json 渲染视图不起作用的主要内容,如果未能解决你的问题,请参考以下文章
CakePHP 2.3.2 BasicAuthentication 不起作用
无法使用 cakePHP requestAction 加载完整视图