我正在通过带标题的邮递员发送 POST 请求
application/json
和身体:
{
"name": "user"
}
当我尝试从请求对象中获取此参数时
$request->request->get('name')
我没有了。
但是当我使用$request->getContent()
时,我收到原始字符串。
看起来我的请求没有被正确解析。请求有什么问题?
更新:
原来文档对此不清楚,我需要手动将 body 转换为 json。真的不明白为什么不默认在框架中这样做。
这是预期的行为。您正在请求正文中发送一个 JSON 字符串。
在这种情况下,您需要 json_decode 将 JSON 字符串转换为数组或对象,以便访问数据。
$parameters = json_decode($request->getContent(), true);
echo $parameters['name']; // will print 'user'
虽然接受的答案是正确的,但我想在这里补充一点,有两种方法。
$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 返回一个对象,除非第二个参数另有指定。
Cacanode 的回答是正确的——你可以从 $request->getContent() 解码 json
但是,如果你想让你的生活更轻松,你可以考虑使用 FOSRestBundle。特别是“body_listener”功能:https://symfony.com/doc/master/bundles/FOSRestBundle/body_listener.html
这个包已经安装了 JSON 和 XML 解码器——如果你愿意,你可以添加一些新的自定义解码器。
使用 Symfony 4.3,您可以使用组件:
...
use Symfony\Component\HttpFoundation\Request;
...
public function doSomething(Request $request){
$a = json_decode($request->getContent(), true);
return $this->json($a);
}
这将返回您发送的相同 json 对象。