使用 Slim PHP 获取 PUT 参数

Posted

技术标签:

【中文标题】使用 Slim PHP 获取 PUT 参数【英文标题】:Get PUT params with Slim PHP 【发布时间】: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 以查看您的数据。 【参考方案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

【讨论】:

以上是关于使用 Slim PHP 获取 PUT 参数的主要内容,如果未能解决你的问题,请参考以下文章

Slim 框架和 GET/PUT/POST 方法

为啥 button_to 不能使用方法: :put with slim in rails

如何在 PHP 中获取 PUT/DELETE 参数

在Slim 4中访问中间件中的路由参数。

如何使用 REST API 中的 PUT 方法上传文件?

PHP Slim 4 - 使用 firebase JWT 令牌授权 api 请求