超薄框架 - post方法如何工作?

时间:2014-09-24 16:34:39

标签: php json rest slim

我写了一份休息服务申请表。

我将此json请求发送到服务:

POST /AndroidEvent/index.php/api/events HTTP/1.1
Host: localhost
Content-Type: application/json
Cache-Control: no-cache

{ "data": { "name": "ApiTest", "city": "Budapest", "place" : "Budapest 1082 Népszínház utca 18.", "event_start_date" :  "2014-09-01 00:00:00", "event_end_date" : "2014-09-21 00:00:00", "decription" : "Ez egy leírás ide", "category_id" : 1, "owner_id": 2, "coord_latitude" : "47.4544", "coord_longitude" : "47.4544", "picture_path" : "http://localhost/picture_path", "is_adult" : 0, "created_on" : "2014-09-21 00:00:00", "updated_on" : "" } }

但是在routes.php的服务器端,我无法以这种方式获取帖子数据:

$app->request->post('data') // I will get an empty array.

但是通过这种方式我可以得到帖子数据:

json_decode($app->request->getBody());

使用$app->request->post('data')

获取帖子数据是不可能的

1 个答案:

答案 0 :(得分:3)

您正在使用POST http方法在http请求正文中发送json字符串。所以为了读它正确的方法是json解码身体然后继续。就像你正在做json_decode($app->request->getBody());

一样

带有method="post"的Web表单在查询字符串中编码输入,然后将其放入正文中。可以使用$app->request->post(<input_name>);

访问以这种方式发送的变量

我认为这里的混淆是$app->request->post(<input_name>);帖子实际上是指php的$ _POST超全局,它自动为你保存解码的查询。它与http方法(动词)POST不同。

http://docs.slimframework.com/#Request-Variables