Laravel 验证对象数组问题

Posted

技术标签:

【中文标题】Laravel 验证对象数组问题【英文标题】:Laravel validate array of objects issue 【发布时间】: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)。试试看是否可行。 【参考方案1】:

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

【讨论】:

以上是关于Laravel 验证对象数组问题的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 验证 - 数组字段,仅允许两个字段之一,但都不是必需的

如何验证整个请求是 Laravel 中的一个数组?

Laravel 请求验证对象

如何为嵌套的对象数组添加验证

如何在 Laravel 验证中要求数组并防止获得意外的键

将对象对象转换为对象数组(PHP,Laravel)