使用 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 参数的主要内容,如果未能解决你的问题,请参考以下文章