【问题标题】:Symfony post request body parameters?Symfony 发布请求正文参数?
【发布时间】:2023-03-26 22:53:01
【问题描述】:

我正在通过邮递员发送带有 1 个标头应用程序/json 的 POST 请求 和身体

{
    "name": "user"
}

当我尝试从请求对象中获取这个参数时 $request->request->get('name') 为空。 但是当我使用$request->getContent() 时,我会收到原始字符串。

看起来我的请求没有正确解析。请求有什么问题?

更新:

原来文档并不清楚,我需要手动将正文转换为 json。不太明白为什么不在框架中默认做。

【问题讨论】:

    标签: rest symfony postman


    【解决方案1】:

    这是预期的行为。您在请求正文中发送了一个 JSON 字符串。

    在这种情况下,您需要json_decode 将 JSON 字符串转换为数组或对象,以便访问数据。

    $parameters = json_decode($request->getContent(), true);
    echo $parameters['name']; // will print 'user'
    

    【讨论】:

      【解决方案2】:

      虽然接受的答案是正确的,但我想在这里补充一下,有两种方法。

      $payload = json_decode($request->getContent(), true);
      echo $payload['name']; // will print 'user'
      

      $payload = json_decode($request->getContent(), false);
      echo $payload->name; // will print 'user'
      

      默认情况下,json_decode 返回一个对象,除非第二个参数另有指定。

      • 真:数组
      • false:对象(默认)

      【讨论】:

        【解决方案3】:

        来自 Cacanode 的回答是正确的 - 您可以从 $request->getContent() 解码 json

        但是,如果您想让您的生活更轻松,您可以考虑使用 FOSRestBundle。特别是“body_listener”功能:https://symfony.com/doc/master/bundles/FOSRestBundle/body_listener.html

        这个捆绑包已经安装了 JSON 和 XML 解码器 - 如果需要,您可以添加一些新的自定义解码器。

        【讨论】:

          【解决方案4】:

          使用 Symfony 4.3,您可以使用该组件:

          ...
          use Symfony\Component\HttpFoundation\Request;
          
          ...
          
          public function doSomething(Request $request){
                  $a = json_decode($request->getContent(), true);
          
                  return $this->json($a);
          }
          

          这将返回您发送的相同 json 对象。

          【讨论】:

          • 感谢重播,您能说得更具体点吗?我认为这是一个使用 Symfony Request 接收 json 主体并返回与 json 相同的对象的简单示例。
          猜你喜欢
          • 2020-04-12
          • 2021-07-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-13
          • 1970-01-01
          • 2018-02-23
          相关资源
          最近更新 更多