【问题标题】:Laravel validate array of objects issueLaravel 验证对象数组问题
【发布时间】:2019-02-08 21:22:16
【问题描述】:

我有一个请求,我在其中传递了一组 JSON 对象。它具有以下结构

[ {path: 'string', class: 'string'} ]

据我所知,没有简单的方法来检查这个数组,所以我尝试了下一个

$validatedData = $request->validated();

        $result = ['data' => []];
        foreach ($validatedData['items'] as $item) {
            $result['data'][] = json_decode($item);
        }

        Validator::make($result, [
            'data.*.path' => 'required|url',
            'data.*.class' => 'required|string'
        ])->validate();

但是结果

array(1) {
  ["data"]=>
  array(2) {
    [0]=>
    object(stdClass)#813 (2) {
      ["link"]=>
      NULL
      ["class"]=>
      NULL
    }
    [1]=>
    object(stdClass)#814 (2) {
      ["link"]=>
      NULL
      ["class"]=>
      NULL
    }
  }
}

验证器以某种方式切断了数据。当我尝试不使用 Validator::make 部分时,它工作正常,但是我需要控制我检索的内容。

【问题讨论】:

  • 试一下$result = [];
  • 为什么不能验证 JSON 输入?我对你的问题以及为什么你必须解码 JSON 并构建一个结果数组开始感到有点困惑。您是否在非 json 请求中发送 JSON?
  • 我正在发送一个带有 JSON.stringifyed 字段的 FormData。该字段包含数组。由于它是 JSON PHP 将其视为字符串,因此我不得不寻找解决方法
  • 有什么特别的原因吗?为什么不直接发送一个 json 请求呢?
  • 你有一个对象数组,因为 json_decode 返回一个对象。要让它返回一个关联数组,您需要执行json_decode($item, true)。试试看是否可行。

标签: php json laravel validation dingo-api


【解决方案1】:

你有一个对象数组,因为json_decode 返回一个对象。要让它返回一个关联数组,您需要执行json_decode($item, true)。你需要这样做,因为 Laravel 验证器需要数据和验证规则都是数组。由于您传递了一个对象数组,因此它不起作用。

【讨论】:

    猜你喜欢
    • 2018-05-06
    • 1970-01-01
    • 2018-02-23
    • 2016-08-10
    • 2021-08-21
    • 2019-02-07
    • 2015-07-07
    • 1970-01-01
    • 2021-11-19
    相关资源
    最近更新 更多