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