1

我正在尝试使用 Slim 框架从 PUT 请求中检索参数。当从 POST 正文中解析参数时,我可以简单地使用它$request->post('param')来检索 param 中的值。但是,当我使用 时$request->put('param'),我总是收到 null。

我的 PUT 体是这样形成的:param=value&otherparam=othervalue&foo=bar...

PS:我已经看过this question,但答案没有使用put()-Method。

4

1 回答 1

5

null回来是$request->put('param')因为你试图在一条POST路线上调用它。在获取参数 之前,您需要创建一个单独的PUT路由(或使用mapand )。viaPUT

此外,我不建议将 HTTP 动词添加到路由中。这会导致一些非常混乱的架构。

添加额外的路线:

$app->post('/api/something/:id', function () {});
$app->put('/api/something/:id', function () {});

使用自定义 HTTP 方法mapvia

$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 之外的某个地方,可能是你的测试方式或者你的路由或测试参数中的拼写错误。

于 2014-01-18T15:47:46.007 回答