如何设置CakePHP 2.x以表现得像RESTful Web服务(与Javascript MVC一起使用)

时间:2012-08-13 22:40:07

标签: cakephp rest json javascriptmvc

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

[{
   '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()中吗?或者有人甚至可能知道现有的解决方案/插件吗?在我目前的情况下,这对我来说是最好的,因为我非常紧迫。

1 个答案:

答案 0 :(得分: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开始。您感兴趣的lib是HttpSocket。至于json编码和服务响应,Request Handling包括响应所有请求方式,内容类型,解码和编码json等等。最后,内置Set实用程序几乎将当然可以涵盖一两行中所需的任何数组操作。

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

对于几乎任何基本的服务端点,您可能会创建一个控制器(而不是AppController - 这是应用程序范围的,因此您不能直接调用它)方法,考虑Cake将控制器/操作路由到您的URL:< / p> 来自其他应用的使用消费服务将如下所示:

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