2012-08-13 36 views
0

我想设置cakephp与JavaScriptMVC很好的工作(http://forum.javascriptmvc.com) 。 JavaScriptMVC需要在以下格式JSON-输出:如何设置CakePHP 2.x的行为像一个REST风格的web服务(与JavascriptMVC一起使用)

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

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

回答

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已经有了全面的REST服务支持,至少从Cake 1.2开始。您感兴趣的库是HttpSocket。至于json编码和服务响应,Request Handling包括响应所有请求,内容类型,解码和编码json等方式。最后,内置的Set实用程序几乎可以肯定涵盖您需要的任何数组操作一两行。

您感兴趣的功能非常基础,并没有太多变化。我敢打赌,你已经发现的许多(相当简单的)解决方案可能仍然有效,也许稍微调整一下。

对于几乎任何基本的服务端点,您可能会创建一个控制器(而不是AppController - 这是应用程序范围内的,因此您不能直接调用它)方法,因为Cake将controller/action路由到您的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. 
} 

蛋糕从同一个控制器/动作提供服务于不同的应用程序,简直是:

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

或者你也可以用foreach($this->data as $data) { ...来循环该数组以删除类名。但是如果你的数据将包含相关的模型等,Set可能是最通用和最有弹性的解决方案。

无论如何,HTH

+0

非常感谢您回答我的问题。解释我的不寻常的方法:它更多的是一个实际的准备工作(为此我需要JavaScriptMVC)和做一份工作(为此我需要蛋糕)的实践性质。不要为了我不得不承认的一个吝啬。此外,JavaScriptMVC可以用作编程数据连接jQuery插件的工具。在这种情况下,我只是尝试为嵌套的图像应用程序构建一个接口。 – 2012-08-15 00:01:06

相关问题