You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中手动创建Request实例后调用$request->json()->all()返回空数组的问题排查

问题原因与解决方案

嘿,我一眼就看出问题出在哪了——你搞混了Laravel Request里不同参数的存储位置!

你用$request->query->add(['foo' => 'bar'])添加的是URL上的GET查询参数,而$request->json()->all()是用来读取请求体里的JSON格式数据的,这俩根本不是一个东西,所以调用后者自然返回空数组咯。

要让json()->all()能拿到数据,你得给Request设置JSON格式的请求体,同时还要告诉Laravel这个请求的Content-Type是JSON,这样它才会把请求体解析成JSON对象。

修改后的代码应该是这样的:

$request = new \Illuminate\Http\Request();
$request->setMethod('POST');
// 把要传递的数组转成JSON字符串,设置为请求体内容
$request->setContent(json_encode(['foo' => 'bar']));
// 设置请求头,标记这是JSON类型的请求
$request->headers->set('Content-Type', 'application/json');

$postData = $request->json()->all();
dd($postData); // 现在就能输出 ['foo' => 'bar'] 啦

顺便提一句:如果你的需求只是获取GET参数,那直接用$request->query->all()或者$request->input('foo')就行,但既然你要调用json()->all(),就必须按上面的方式设置JSON请求体哦。

内容的提问来源于stack exchange,提问作者Gilberto S. Rocha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 07:44:06