在 Symfony 2.3 控制器中访问 POST 请求的 JSON 正文

Posted

技术标签:

【中文标题】在 Symfony 2.3 控制器中访问 POST 请求的 JSON 正文【英文标题】:Accessing JSON body of POST request in Symfony 2.3 controller 【发布时间】:2019-10-22 14:18:01 【问题描述】:

过去 3 个小时,我一直在尝试将传入 POST 请求的 JSON 正文解析到我在 Symfony 2.3.3 中构建的 API 端点。

我终其一生都无法弄清楚如何接触身体,这让我发疯。我有一个墓地,里面装满了我尝试过的语法,但都没有奏效。没用的都在下面。

发布请求:

app_1    | Accept:          application/json
app_1    | Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
app_1    | Connection:      close
app_1    | Content-Length:  19
app_1    | Content-Type:    application/json
app_1    | Host:            localhost
app_1    | User-Agent:      Faraday v0.15.4
app_1    | X-php-Ob-Level:  1
app_1    |
app_1    | "hello":"goodbye"

内部控制器默认操作(一切都不起作用):

        $request = $this->getRequest();
        $hello = $request->query->get('hello');
        $hello1 = $request->request->get('hello');
        $hello2 = $request->get('hello');

        $json2 = filter_input(INPUT_POST, 'hello', FILTER_DEFAULT);

每当我 error_log() 任何上述变量时,我都会得到空白或 nil。

我做错了什么?

【问题讨论】:

【参考方案1】:
if (0 === strpos($request->headers->get('Content-Type'), 'application/json')) 
      $data = json_decode($request->getContent(), true);

您可以使用php://input,但效率低下。

【讨论】:

事实证明你是对的,请编辑你的答案,我会投赞成票。谢谢! 我对你的答案投了反对票,因为我认为它指的是不同版本的 Symfony——所以除非你编辑你的答案,否则我不会让我把我的投票改成赞成票 :)

以上是关于在 Symfony 2.3 控制器中访问 POST 请求的 JSON 正文的主要内容,如果未能解决你的问题,请参考以下文章

访问 Symfony2 控制器中未映射的字段

symfony 2.3 在 __construct 函数中调用非对象的成员函数 get()

API 平台 Symfony 5 JWT 访问控制

如何使用 Symfony 和 Jquery 发出 POST Ajax 请求

Symfony2:KnpPaginator 仅显示带有 POST 表单的第一页

Symfony 2.3 - 使用带有 LESS 的 Twitter Bootstrap 3,通过 composer setup 作为供应商安装,无法访问 Glyphicons 字体