框架就在这里 http://luracast.com/products/restler/
我正在使用restler作为我工作的宁静api, 当我使用骨干模型保存到网址时,它使用'HTTP PUT'请求方法将我的数据作为json发送和更新,我希望从我推出的内容中获得响应...
如果是HTTP POST请求方法我可以使用
// to getting content from a POST
$post_data = json_decode(file_get_contents('php://input'), true);
获取我的内容,但无法从HTTP PUT获取任何内容
// 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 :(得分:6)
正如我对您的问题发表评论时,php://input
是一个流,如果您从中读取,则会将其清空。
我以前从未使用过Restler但是看了下载中提供的几个例子,似乎表明提交的数据会自动作为参数传递给你的put处理程序。
在Restler的crud example中,Author类有一个像这样的put请求:
function put($id=NULL, $request_data=NULL) {
return $this->dp->update($id, $this->_validate($request_data));
}
因此我猜测restler已经读过php://input
流,因此将其清空。
所以,你的put处理程序应该更像他们的例子:
function putpatients($id, $request_data = NULL) {
/* do something with the $request_data */
var_dump($request_data);
}
编辑:@deceze实际上有一个previous SO question,它说明为什么从php输入两次输入不起作用 - 对于PUT请求 - 这解释了为什么你的代码使用了POST请求。无论哪种方式,你应该真正使用Restler提供的设施,而不是重新发明休息轮。
答案 1 :(得分:0)
您选择的开发者工具(firebug等)是否显示响应?
如果是这样,如果你放置echo json_encode($post_data['name']);
而不是回声,它会有所帮助。
答案 2 :(得分:0)
尝试使用print_r()函数显示变量示例的值:
print_r($post_data);