【问题标题】:PUT request body NULL on Slim在 Slim 上 PUT 请求正文 NULL
【发布时间】:2014-12-19 22:01:04
【问题描述】:

我想我已经阅读了所有关于在 Slim 框架(在 Windows XAMPP 上运行)上获取 PUT 请求正文的问题的答案。似乎没有一个解决方案对我有用,所以我可能还缺少另一个警告。

我的php代码如下:

require 'Slim/Slim.php';

\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();
$app->run();

$app->put('/calendar/update/:id', function($id) use ($app){
    $ev = json_decode($app->request()->getBody());
    echo var_dump($ev);  // NULL
}

我一直在 PHPStorm 的 REST 测试器中对其进行测试,同时使用参数和查询字符串 - 无济于事。我也尝试在我的 ajax 调用中明确设置 contentType: application/x-www-form-urlencoded

这里好像迷路了……

【问题讨论】:

  • 对于 json 请求 application/x-www-form-urlencoded 是错误的。请改用 application/json。
  • @MikaTuupola 谢谢,但 json 通过$app->contentType('application/json'); 在整个 Slim 应用程序中设置为默认值 - 我使用 x-www... 仅作为测试尝试。

标签: php request put slim


【解决方案1】:

$app->contentType() 方法只影响从 Slim 发送回 HTTP 客户端的 HTTP 响应。我相信 Mika 建议您将 HTTP 请求的 Content-Type 标头更改为 application/json 如果您打算解析请求正文,如上面的示例所示。

此外,您应该只在定义路由之后调用$app->run()。上面的示例在路由之前调用 $app->run()

希望这会有所帮助!

-乔什

【讨论】:

    【解决方案2】:

    有类似的问题。如果您使用表单发送 put 请求。将此隐藏字段添加到您的表单中。也不要忘记移动 $app-run();到最后一行。

    <input type="hidden" name="_METHOD" value="PUT"/>
    

    http://docs.slimframework.com/routing/put/

    【讨论】: