因此,我正在构建一个接受json输入的api,并使用Request在控制器中捕获它:
{
"val1": "11",
"val2": "1000",
"val3": "1001010",
"val4": "1001"
}
但是当用户未使用正确的json时,我需要抓住一个条件,像这样说:
{
"val1": "11",
"val2": "1000",
"val3": "1001010"
"val4": "1001"
}
当我以错误的输入格式返回$ request时,得到了空数组。但是,我曾尝试根据要求使用isset()
,empty()
,count()
,但仍然没有检查参数。
public function foo(Request $request)
{
if(jsoniswrong($request)){return 'false';}
}
我需要一种无需调用每个值即可检查请求变量的方法,该怎么办?
编辑: 我最终使用了这个更简单的方法。我刚刚在Laravel中意识到,empty($ request)永远不会返回true,因为即使在错误的请求下,empty($ request)仍然具有除实际输入数据以外的对象。要获取输入数据,请使用all()。这解决了我的问题。
if(empty($request->all())){
return false;
}
答案 0 :(得分:1)
您可以使用validate()方法验证传入的request
是否为json。您可以通过执行以下操作来实现此目的:
public function foo(Request $request)
{
$data = $request->validate([
'json' => 'required|json'
]);
// continue process
}
在这里,我们使用required规则来确保已通过json
。然后,我们使用json规则检查是否已通过有效的json
。 |
用于分隔验证规则。
如果json无效,则将返回有关错误的数据。
请注意,您必须将传入json数据的field/key
命名为与validate()
数组中的键相同。例如如果field/key
被称为data
,则必须为['data' => 'required|json']
。