我正在通过邮递员发送带有1个标头应用程序/ json的POST请求 和身体
{
"name": "user"
}
当我尝试从请求对象中获取此paraneter时
$request->request->get('name')
为空。
但是当我使用$request->getContent()
时,会收到原始字符串。
好像我的请求没有正确解析。请求有什么问题?
更新:
原来,文档尚不清楚,我需要手动将body转换为json。真的不明白为什么默认情况下不会在框架中这么做。
答案 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 返回一个对象,除非第二个参数另有指定。
答案 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对象。