对于CakePHP控制器,JSON应该是什么样的?

时间:2013-01-11 17:59:09

标签: json api cakephp cakephp-2.2

我正在创建一个存储用户旅程的Web应用程序,我在CakePHP 2.2.5中构建了这个应用程序。

我有一个旅程模型,旅程模型有许多坐标对象,用于存储lat长坐标。

我想发送一个API调用到包含json的旅程的add方法来创建一个新对象。

我试图找出如何格式化JSON以允许控制器使用它,但我似乎无法找到答案。我还想知道如何将子对象添加到JSON。

我正在使用此cURL命令测试方法

curl -i -H "ACCEPT: application/json" -X POST --data @/home/sam/data.json http://localhost/journeys/add.json

运行此CURL命令会在数据库中创建一个空白条目。

CURL中包含的JSON文件包含

{"description" : "Hello World", "user_id":3}

2 个答案:

答案 0 :(得分:1)

最好将json转换为数组(使用json_decode函数)然后操作数组,如果你想最后将它转换为json(json_encode函数)。

cakePHP通过以下方式处理此任务:JsHelper::object

编辑1:但我认为当php为你做这件事时,最好使用php纯函数而不是cakePHP函数。

编辑2:我认为cakePHP没有处理它,你应该自己处理它,将你的json转换为数组,在foreach中根据需要更改你的数组然后将它传递给saveAll函数来插入或更新在数据库中。

答案 1 :(得分:0)

我做了更多的研究,找到了解决问题的方法:

CakePHP将保存JSON数据,它还将保存嵌套的模型信息。

$data = $this->request->input('json_decode');

这与@Arash所说的类似,但它也会通过调用

来保存嵌套的模型信息
$this->Journey->saveAssociated($data)

我向控制器提供的JSON如下:

{"Journey":
{"description":"Not even an article from the map", "user_id":3}, 
"Coordinate":[
    {"lat":54.229149, "lng":-5.114115},
    {"lat":54.39153, "lng":-5.114113}
 ]
}

坐标属于Journey。