0

我正在尝试设置 cakephp 以使用非常好的 javascriptMVC (http://forum.javascriptmvc.com)。JavaScriptMVC 需要以下格式的 JSON 输出:

[{
   'id': 1,
   'name' : 'Justin Meyer',
   'birthday': '1982-10-20'
},
{
   'id': 2,
   'name' : 'Brian Moschel',
   'birthday': '1983-11-10'
}]

Cake 会生成一个带有前置类名的更深的嵌套数组。我找到了解决问题的尝试,但它们不适用于 cakephp 2.x。我知道我可以通过 php 简单地生成一个新数组和 json_encode() 它,但最好包含一个像https://gist.github.com/1874366这样的函数和另一个去扁平化它的函数。放置这些功能的最佳位置在哪里?AppController 似乎不起作用。我应该把它放在控制器的 beforeRender () 还是 beforeFilter() 中?或者有人甚至可能知道现有的解决方案/插件吗?在我目前的情况下,这对我来说是最好的,因为我的时间非常紧迫。

4

1 回答 1

2

好的,我不是 100% 确定我理解你想要做什么,所以这里有一个聪明人的话,以防万一:Cake 和 JMVC 都是全面的 MVC 框架。如果您试图将它们组合为一个单一的有凝聚力的平台来构建您的应用程序,我强烈建议您检查您的方法/平台/等。

另外——我不是 jmvc 方面的专家,所以我只是假装在 jmvc 中处理来自 Cake 的响应是完全不可能的,出于某种奇怪的原因。作为记录,想想 Cake 的反应是这样的:

{ "Model" : 
    [{
    'id': 1,
    'name' : 'Justin Meyer',
    'birthday': '1982-10-20'
    },
    {
    'id': 2,
    'name' : 'Brian Moschel',
    'birthday': '1983-11-10'
    }]
 }

至少从 Cake 1.2 开始,Cake 就有全面的 REST 服务支持。您感兴趣的库是HttpSocket。至于 json 编码和服务响应,请求处理包括响应各种请求、内容类型、解码和编码 json 等。最后,内置的Set实用程序几乎肯定会涵盖您需要的任何数组操作在一两行。

您感兴趣的功能非常基本,并没有太大变化。我敢打赌,您已经找到的许多(相当简单的)解决方案可能仍然有效,可能需要稍作调整。

对于几乎任何基本的服务端点,您可能会创建一个控制器(不是 AppController - 这是应用程序范围的,因此您不能直接调用它)方法,考虑到 Cake 将控制器/动作路由到您的 url:

来自不同应用的蛋糕消费服务如下所示:

http://cakeproject/collect/getInfo

class CollectController extends AppController {

public function getInfo($array = null) {
    App::uses('HttpSocket', 'Network/Http'); 
    $http = new HttpSocket();
    $http->get('http://jmvcproject/controller/action', $array);
    // ...etc. 
} 

Cake从同一个控制器/动作向不同的应用程序提供服务只是:

public function getInfo($array = null) {
    $results = $this->Collect->find('all', $array);
    // ...fetch the results
} 

或者您可以只循环该数组foreach($this->data as $data) { ...以删除类名。但是,如果您的数据将包括相关模型等,那么 Set 可能是最通用和最灵活的解决方案。

无论如何,HTH

于 2012-08-14T02:43:35.107 回答