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

Mec*_*MK1 1 rest http-put slim

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

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

PS:我已经看过这个问题,但答案没有使用put()-Method.

Jer*_*all 5

null回来了$request->put('param')因为你试图在POST路线上打电话.在获得参数之前,您需要创建一个单独的PUT路径(或使用mapvia)PUT.

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

添加其他路线:

$app->post('/api/something/:id', function () {});
$app->put('/api/something/:id', function () {});
Run Code Online (Sandbox Code Playgroud)

使用自定义HTTP方法(mapvia)

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

请参阅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);
});
Run Code Online (Sandbox Code Playgroud)

我从命令行用cURL调用它,如下所示:

curl -X PUT -d name=arthur http://slim-tutorial.dev/test/2
Run Code Online (Sandbox Code Playgroud)

结果:

PUT request for resource id 2, name "arthur"%
Run Code Online (Sandbox Code Playgroud)

如果你有一个工作的Slim应用程序并且以上对你不起作用,可能问题是在Slim之外的某个地方,可能是你在测试路线或测试参数中的错误.