【问题标题】:Get PUT params with Slim PHP使用 Slim PHP 获取 PUT 参数
【发布时间】:2014-05-20 13:38:19
【问题描述】:

我搜索了,但没有找到答案。我有一个 RESTful API 来管理基本的 CRUD。我正在尝试使用 PUT 创建更新方法,但无法检索参数值。我正在使用Postman 发出请求,我的请求如下所示:

网址

http://localhost/api/update/987654321

参数

id = 987654321
name = John Smith
age = 35

PHP

$app = new Slim();
$app->put('/update/:id', function( $id ) use( $app ){
    var_dump([
        'id' => $id,
        'name' => $app->request->put('name'),
        'age' => $app->request->put('age')
    ]);
});

我的var_dump() 结果是:

array(3) {
  ["id"]=>
  string(9) "987654321"
  ["name"]=>
  NULL
  ["age"]=>
  NULL
}

怎么了?有什么想法吗?

【问题讨论】:

  • 查看手册docs.slimframework.com/#Request-Body 如果您向下滚动到“请求变量”部分,那里有一个示例。或者,您可以直接从正文中获取参数并通过执行 parse_str(file_get_contents("php://input"),$post_vars); 将其放入 var
  • 我想在这个请求中上传图片。用POST更新是不好的做法?
  • 对不起,我的评论不是关于 POST 数据,我从另一个站点复制了代码。然而,PUT 数据设置在请求的正文中,就像除 GET 之外的所有其他类型的请求一样(尽管您可能能够将正文字符串附加到 GET 请求,但我从未尝试过)。您可以执行 parse_str($app->request->getBody(), $vars); 并对其执行 var_dump 以查看您的数据。

标签: php rest put restful-url slim


【解决方案1】:

我遇到了同样的问题。首先,我使用 Postman 选项发送 PUT 数据以将其编码为“表单数据”,这就是 Slim 没有获取参数值的原因。

正如W3 中所述,内容类型“multipart/form-data”应用于提交包含文件、非 ASCII 数据和二进制数据的表单。

在我们的例子中,我们必须使用 Postman 选项“x-www-form-urlencoded”发送 PUT 数据(参见 W3 中“application/x-www-form-urlencoded”的解释)。

【讨论】:

  • 使用邮递员切换到 x-www-form-urlencoded 以使其正常工作!感谢您提供详细解释的答案(w3 链接)!
  • 你刚刚节省了我几个小时的头疼。谢谢!
  • 我有一个问题,x-www-form-urlencoded 无法上传文件,它只接受字符串。如何使用 PUT/PATCH 方法上传文件..?
【解决方案2】:

$app->request->put() 正在返回一个空值...

所以你可以改用 try $app->request->params

【讨论】:

    猜你喜欢
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 2021-11-25
    • 2014-09-20
    • 1970-01-01
    相关资源
    最近更新 更多