我发送的POST请求由 Postman 与头部application/json和身体:
application/json
{ "name": "user" }
当我尝试从请求对象$request->request->get('name')获取这个参数时,我得到了null。但是当我使用$request->getContent()时,我得到了原始字符串。似乎我的请求未正确解析。请求有什么问题?更新:原来,文档不清楚这一点,我需要手动转换身体到json。真的不明白为什么不这样做的框架默认。
$request->request->get('name')
$request->getContent()
wlzqhblo1#
这是预期的行为。您将在请求主体中发送JSON字符串。在本例中,需要使用json_decode将JSON字符串转换为数组或对象,以便访问数据。
$parameters = json_decode($request->getContent(), true); echo $parameters['name']; // will print 'user'
ujv3wf0j2#
虽然公认的答案是正确的,但我想在此补充一点,有两种方法可以做到这一点。
$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将返回一个对象。
9w11ddsr3#
Cacanode的回答是正确的-您可以从$request-〉getContent()中解码json但是,如果你想让你的生活更轻松,你可以考虑使用FOSRestBundle,特别是“body_listener”功能:https://symfony.com/doc/master/bundles/FOSRestBundle/body_listener.html这个包已经安装了JSON和XML解码器--如果需要,您可以添加一些新的自定义解码器。
uqjltbpv4#
如果您想将请求主体解码为数组,有一个名为toArray的方便的帮助器方法。
toArray
$request->toArray();
lndjwyie5#
使用Symfony 4.3,您可以使用以下组件:
... use Symfony\Component\HttpFoundation\Request; ... public function doSomething(Request $request){ $a = json_decode($request->getContent(), true); return $this->json($a); }
这将返回您发送的相同json对象。
5条答案
按热度按时间wlzqhblo1#
这是预期的行为。您将在请求主体中发送JSON字符串。
在本例中,需要使用json_decode将JSON字符串转换为数组或对象,以便访问数据。
ujv3wf0j2#
虽然公认的答案是正确的,但我想在此补充一点,有两种方法可以做到这一点。
或
默认情况下,除非第二个参数另有指定,否则json_decode将返回一个对象。
9w11ddsr3#
Cacanode的回答是正确的-您可以从$request-〉getContent()中解码json
但是,如果你想让你的生活更轻松,你可以考虑使用FOSRestBundle,特别是“body_listener”功能:https://symfony.com/doc/master/bundles/FOSRestBundle/body_listener.html
这个包已经安装了JSON和XML解码器--如果需要,您可以添加一些新的自定义解码器。
uqjltbpv4#
如果您想将请求主体解码为数组,有一个名为
toArray
的方便的帮助器方法。lndjwyie5#
使用Symfony 4.3,您可以使用以下组件:
这将返回您发送的相同json对象。