框架在这里
http://luracast.com/products/restler/

我正在使用restler作为我的工作的宁静API,
当我使用骨干模型保存到URL时,它通过使用“ 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格式返回数据?

最佳答案

如我对您的问题的评论所述,php://input是一个流,如果您从中读取,它将清空。

我以前从未使用过Restler,但查看其下载中提供的一些示例,似乎表明提交的数据会作为参数自动传递给put处理程序。

在Restler的crud example中,Author类具有如下放置请求:

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:// input读取两次不起作用-对于PUT请求-这说明了为什么代码可以与POST请求一起使用。无论哪种方式,您都应该真正使用Restler提供的功能,而不是重新发明靠垫轮。

09-26 16:59