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
相关产品推荐
相关产品推荐

