【问题标题】:Laravel (Request $request) handling how to check if input is in the correct json format?Laravel (Request $request) 处理如何检查输入是否为正确的 json 格式?
【发布时间】:2018-09-19 08:48:46
【问题描述】:

所以我正在构建一个接受 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,因为即使在错误的请求下,它仍然具有实际输入数据以外的对象。要获取输入数据,请使用 all()。这解决了我的问题。

    if(empty($request->all())){
        return false;
    }

【问题讨论】:

  • @thisiskelvin 在我的例子中,在函数内部,$request 已经被转换为一个对象。
  • @syam 我尝试使用它,但 $request 已经是一个对象
  • 感谢您的澄清。顺便说一句,我看不出您在问题中发布的有效和无效 json 之间的区别。
  • @thisiskelvin 'invalid' 缺少逗号,在控制器中这将被视为无输入。棘手的部分是这些值是可选的,因为这些值可以为空。现在我需要知道请求实际上是空的还是格式错误。

标签: php json laravel


【解决方案1】:

您可以使用validate() 方法为json 验证传入的request。您可以通过执行以下操作来实现此目的:

public function foo(Request $request)
{
    $data = $request->validate([
        'json' => 'required|json'
    ]);

    // continue process
}

在这里,我们使用required 规则来确保json 已通过。然后我们使用json 规则检查是否通过了有效的json| 用于分隔验证规则。

如果 json 无效,将返回有关错误的数据。

请注意,您必须将传入的json数据的field/key命名为与validate()数组中的key相同。例如如果field/key 被称为data,则它必须是['data' => 'required|json']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 2014-09-17
    • 2017-09-16
    相关资源
    最近更新 更多