Symfony 发布请求正文参数?

ogb*_*jnr 9 rest symfony postman

我正在通过邮递员发送 POST 请求,其中包含 1 个头应用程序/json 和正文

{
    "name": "user"
}
Run Code Online (Sandbox Code Playgroud)

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

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

更新:

原来文档对此不清楚,我需要手动将 body 转换为 json。真的不明白为什么默认情况下不在框架中这样做。

Cac*_*nde 21

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

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

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


yor*_*gos 9

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

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

或者

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

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

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


Mic*_*ens 6

如果您想将请求正文解码为数组,可以使用一个方便的辅助方法,称为toArray您可以在Symfony 文档中阅读有关访问请求数据的更多信息

$request->toArray();
Run Code Online (Sandbox Code Playgroud)