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 手动保存关联对象

CakePHP 2.1 - 模型关联 - 保存和查找

CakePHP 2.1 - 保存(和创建)多个连接模型和关联模型

CakePHP 2.1:德语变音符号的 Sluggable 行为

CakePHP 2.1烘焙测试应用程序并失败

CakePHP 2.1 中的 Facebook 点赞对话列表(与分组最大值、子查询、加入相关)