postman Symfony发布请求主体参数?

2ic8powd  于 2023-03-18  发布在  Postman
关注(0)|答案(5)|浏览(166)

我发送的POST请求由 Postman 与头部application/json和身体:

{
    "name": "user"
}

当我尝试从请求对象$request->request->get('name')获取这个参数时,我得到了null。但是当我使用$request->getContent()时,我得到了原始字符串。
似乎我的请求未正确解析。请求有什么问题?
更新:
原来,文档不清楚这一点,我需要手动转换身体到json。真的不明白为什么不这样做的框架默认。

wlzqhblo

wlzqhblo1#

这是预期的行为。您将在请求主体中发送JSON字符串。
在本例中,需要使用json_decode将JSON字符串转换为数组或对象,以便访问数据。

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

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将返回一个对象。

  • true:数组
  • false:对象(默认)
9w11ddsr

9w11ddsr3#

Cacanode的回答是正确的-您可以从$request-〉getContent()中解码json
但是,如果你想让你的生活更轻松,你可以考虑使用FOSRestBundle,特别是“body_listener”功能:https://symfony.com/doc/master/bundles/FOSRestBundle/body_listener.html
这个包已经安装了JSON和XML解码器--如果需要,您可以添加一些新的自定义解码器。

uqjltbpv

uqjltbpv4#

如果您想将请求主体解码为数组,有一个名为toArray的方便的帮助器方法。

$request->toArray();
lndjwyie

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对象。

相关问题