CakePHP 2.1 JsonView
Posted
技术标签:
【中文标题】CakePHP 2.1 JsonView【英文标题】: 【发布时间】:2012-04-08 18:43:02 【问题描述】:我正在使用新的 Cakephp 2.1,并希望使用 JsonView 使我的控制器响应客户端由 jQuery 创建的 AJAX 请求。
但是,这应该根据文档使用 JsonView 自动完成。
http://book.cakephp.org/2.0/en/views/json-and-xml-views.html
我在 routes.php 文件中添加了这一行
Router::parseExtensions('json');
在我的控制器中我有
$this->RequestHandler->setContent('json', 'application/json' );
$bookings = $this->Bookings->find('all');
$this->set('bookings', $bookings);
$this->set('_serialize', 'bookings');
那么视图应该已经过时了,但是当我调用它时,它仍然提供一个指向缺失视图的页面。
【问题讨论】:
请注意,您不需要明确设置application/json
。
【参考方案1】:
您是否已将“RequestHandlerComponent”添加到控制器的组件列表中?
我走了另一条路并创建了一个 JSON 视图: /app/View/Model/json/view.ctp
<?php
echo json_encode(array(
'success' => TRUE
));
在我的控制器中我使用了:
$this->viewClass = 'Json';
问候, 詹姆斯
【讨论】:
可能有用,但我正在寻找使用 JsonView 的“简单”解决方案,下面的答案使额外的视图过时了......【参考方案2】:您调用的网址是否以“.json”结尾?
【讨论】:
这确实与众不同!谢谢。在支持 seo 的 url 重写的框架中需要 .json 有点奇怪... 没问题。但这当然是一件好事。因此,您完全知道对您的页面的哪些调用是 ajax 调用,哪些不是(例如在 awstats 或类似中)。为了以后不会遇到此类问题,请尝试查看 cake 的核心代码。遵循从进入框架的请求,直到通过转储变量或反射类进入控制器中的操作,向您展示了有关框架本身的很多信息。 ;) 但你也可以再问一次;P【参考方案3】:我对 Cake 希望我明确设置 json 视图有一些问题。默认情况下,XML 视图加载良好,但不是 json。
我在我的 API 函数中执行了以下操作:
if($this->RequestHandler->ext == 'json')
$this->autoRender = false;
echo json_encode($results);
else if($this->RequestHandler->ext == 'xml')
$this->set(array(
'results' => $results,
'_serialize' => array('results')
));
【讨论】:
以上是关于CakePHP 2.1 JsonView的主要内容,如果未能解决你的问题,请参考以下文章
CakePHP 2.1 - 保存(和创建)多个连接模型和关联模型