2012-03-01 82 views
2

框架是在这里 http://luracast.com/products/restler/无法获取“HTTP PUT”内容PHP

我使用作为我的作品宁静API restler, 当我使用骨干模型保存到一个URL,它发送和更新我作为JSON数据通过使用“HTTP PUT”请求方法,我想从我的推杆

响应......如果它是一个HTTP POST请求方法,我可以使用

// to getting content from a POST 
$post_data = json_decode(file_get_contents('php://input'), true); 

获取我的内容,但无法从HTT获取任何内容普将

// can't get anything from a PUT 
function putpatients($id) { 
    $post_data = file_get_contents('php://input'); 
    $post_data = json_decode($post_data, true); 
    echo $post_data['name']; 
} 

浏览器响应空白

我如何恢复我的数据作为JSON ???

+0

对不起,不知道问题是什么。 *输入*是空白的吗? *输出*为空白吗?客户端是否空白? – deceze 2012-03-01 09:11:28

+3

'php:// input'是一个流,如果你从中读取,它会清空它。 您可能已经阅读过吗?如果是这样的话,第二个'file_get_contents('php:// input')'会返回''''' – Ben 2012-03-01 09:52:04

回答

6

正如我评论了你的问题,php://input是甲流,如果你从中读取,它清空它。

我从来没有用过Restler但看着他们的下载提供的几个例子,它似乎表明提交的数据作为参数传递给你放的处理程序自动传递之前..

在Restler的crud example中,作者类有这样的PUT请求:

function put($id=NULL, $request_data=NULL) { 
    return $this->dp->update($id, $this->_validate($request_data)); 
} 

所以我猜restler已经阅读php://input流,因此清空它。

所以,你放的处理程序也许应该更喜欢在自己的例子:

function putpatients($id, $request_data = NULL) { 
    /* do something with the $request_data */ 
    var_dump($request_data); 
} 

编辑:有来自@deceze谈到有关为什么从PHP读取两次实际上是previous SO question是://输入没有按” t工作 - 用于PUT请求 - 这解释了为什么你的代码使用POST请求。无论哪种方式,你都应该使用Restler提供的设施,而不是重新发明其他车轮。

+0

我很好,当我到达我的家时尝试... – crapthings 2012-03-01 11:00:30

+0

哦,我的上帝,它的工作...我曾经使用这个函数函数putpatients($ id,$ data = NULL){/ *使用$ request_data */ var_dump($ data); }但不返回任何内容,这全是关于参数名称。好吧,我明白了。 – crapthings 2012-03-01 11:56:57

+0

@crapthings。嗯,我不认为参数的实际名称应该改变任何东西,可能是一个不同的问题。但是,嘿,如果它没有中断.. – Ben 2012-03-01 12:00:32

0

您选择的开发人员工具(萤火虫等)是否显示回应?

如果是的话,如果你把echo json_encode($post_data['name']);,而不是你的回音它可以帮助。

+0

chrome我已经使用了var_dump(file_get_contents('php:// input'));那么我得到的是字符串(0)“” – crapthings 2012-03-01 09:24:07

0

尝试使用的print_r()函数用于显示例如变量的值:

print_r($post_data); 
+0

空白变量内容?怎么了 ?我相信我做了一个HTTP PUT REQUEST_METHOD,但我只是不能返回我所提出的。 – crapthings 2012-03-01 09:26:49