Symfony发布请求正文参数?

时间:2019-07-30 22:58:49

标签: rest symfony postman

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

{
    "name": "user"
}

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

好像我的请求没有正确解析。请求有什么问题?

更新:

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

4 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

此捆绑包中已经安装了JSON和XML解码器-您可以根据需要添加一些新的自定义解码器。

答案 2 :(得分:0)

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

$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 :(得分:-1)

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

...
use Symfony\Component\HttpFoundation\Request;

...

public function doSomething(Request $request){
        $a = json_decode($request->getContent(), true);

        return $this->json($a);
}

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