使用Slim Framework无法通过PUT请求获取正文

时间:2014-01-17 08:54:49

标签: rest slim http-put

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

我的PUT主体形成如下:param=value&otherparam=othervalue&foo=bar ...

P.S。:我已经查看了this question,但答案没有使用put() - 方法。

1 个答案:

答案 0 :(得分:5)

您从null返回$request->put('param'),因为您尝试在POST路线上拨打该号码。在获得PUT参数之前,您需要创建单独的map路线(或使用viaPUT)。

此外,我不建议将HTTP动词添加到路由中。这导致了一些非常令人困惑的架构。

添加其他路线:

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

使用Custom HTTP methodsmapvia

$app->map('/api/something/:id', function () {})->via('POST', 'PUT');

请参阅PUT routing documentation,并特别注意方法覆盖部分。

更新:工作示例

以下是我提出的一个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之外的某个地方,可能就是你的测试方式或路线或测试参数中的拼写错误。