我正在尝试使用Slim框架从PUT请求中检索参数。解析参数形成POST主体时,我可以简单地使用$request->post('param')
来检索param中的值。但是,当我使用$request->put('param')
时,我总是收到空。
我的PUT主体形成如下:param=value&otherparam=othervalue&foo=bar
...
P.S。:我已经查看了this question,但答案没有使用put()
- 方法。
答案 0 :(得分:5)
您从null
返回$request->put('param')
,因为您尝试在POST
路线上拨打该号码。在获得PUT
参数之前,您需要创建单独的map
路线(或使用via
和PUT
)。
此外,我不建议将HTTP动词添加到路由中。这导致了一些非常令人困惑的架构。
添加其他路线:
$app->post('/api/something/:id', function () {});
$app->put('/api/something/:id', function () {});
使用Custom HTTP methods(map
和via
)
$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之外的某个地方,可能就是你的测试方式或路线或测试参数中的拼写错误。