Laravel(Request $ request)处理如何检查输入是否为正确的json格式?

时间:2018-09-19 08:48:47

标签: php json laravel

因此,我正在构建一个接受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;
    }

1 个答案:

答案 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']