我正在尝试使用 Slim 框架从 PUT 请求中检索参数。当从 POST 正文中解析参数时,我可以简单地使用它$request->post('param')
来检索 param 中的值。但是,当我使用 时$request->put('param')
,我总是收到 null。
我的 PUT 体是这样形成的:param=value&otherparam=othervalue&foo=bar
...
PS:我已经看过this question,但答案没有使用put()
-Method。
我正在尝试使用 Slim 框架从 PUT 请求中检索参数。当从 POST 正文中解析参数时,我可以简单地使用它$request->post('param')
来检索 param 中的值。但是,当我使用 时$request->put('param')
,我总是收到 null。
我的 PUT 体是这样形成的:param=value&otherparam=othervalue&foo=bar
...
PS:我已经看过this question,但答案没有使用put()
-Method。
你null
回来是$request->put('param')
因为你试图在一条POST
路线上调用它。在获取参数 之前,您需要创建一个单独的PUT
路由(或使用map
and )。via
PUT
此外,我不建议将 HTTP 动词添加到路由中。这会导致一些非常混乱的架构。
添加额外的路线:
$app->post('/api/something/:id', function () {});
$app->put('/api/something/:id', function () {});
使用自定义 HTTP 方法(map
和via
)
$app->map('/api/something/:id', function () {})->via('POST', 'PUT');
请参阅PUT
路由文档,并特别注意方法覆盖部分。
更新:工作示例
这是我发起的一个示例 PUT 请求:
$app->put('/test/:id', function ($id) use ($app) {
$name = $app->request->put('name');
echo sprintf('PUT request for resource id %d, name "%s"', (int) $id, $name);
});
我从命令行使用 cURL 调用它,如下所示:
curl -X PUT -d name=arthur http://slim-tutorial.dev/test/2
结果:
PUT request for resource id 2, name "arthur"%
如果你有一个工作的 Slim 应用程序并且上面的方法对你不起作用,那么问题可能出在 Slim 之外的某个地方,可能是你的测试方式或者你的路由或测试参数中的拼写错误。