如何使用请求验证 Laravel 中的数组?

Posted

技术标签:

【中文标题】如何使用请求验证 Laravel 中的数组?【英文标题】:How to validate array in Laravel with Request? 【发布时间】:2019-12-31 14:46:53 【问题描述】:

我把这个JSON的数据发给Laravel

[
  "name":"...", "description": "...",
  "name":"...", "description": "..."
]

我有一个 StoreRequest 类扩展 FormRequest:

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StoreRequest extends FormRequest

    public function authorize()
    
        return true;
    

    public function rules()
    
        return [
            'name' => 'required|string|min:1|max:255',
            'description' => 'nullable|string|max:65535'
        ];
    

在我的控制器中,我有这段代码,但它不适用于数组:

    public function import(StoreRequest $request) 
        $item = MyModel::create($request);

        return Response::HTTP_OK;
    

我在 Request rules() 中找到了这个处理数组的解决方案:

    public function rules()
    
        return [
            'name' => 'required|string|min:1|max:255',
            'name.*' => 'required|string|min:1|max:255',
            'description' => 'nullable|string|max:65535'
            'description.*' => 'nullable|string|max:65535'
        ];
    

如何更新StoreRequest 和/或import() 代码以避免rules() 中的重复行?

【问题讨论】:

How to write validation rule for JSON laravel?的可能重复 是的,对不起。我忽略了[] 并感到困惑。请查看链接的问题和我的答案。 @Namoshek:我认为这不是重复的......在这个链接的站点中,他们使用我不使用的$validator = Validator::make(),因为我有一个 StoreRequest 类。或者如果这是同一件事,那么我不明白如何将这两者结合使用。 rules() 方法返回的规则用于创建Validator,如另一个问题中所述。都是一样的东西,只是抽象而已…… 基本上,表单请求类(如您的StoreRequest)用于从控制器中提取逻辑。您也可以使用普通的Request 对象和控制器中的Validator 执行完全相同的操作。仍然建议使用表单请求以使您的控制器小而简单。 【参考方案1】:

由于您有一组数据,您需要将* 放在首位:

public function rules()

   return [
       '*.name' => 'required|string|min:1|max:255',
       '*.description' => 'nullable|string|max:65535',
   ];

【讨论】:

这也适用于单个(非数组)对象吗? 不,这需要没有*. 的规则。你不能在没有重复的情况下在一个规则集中做这两个。恕我直言,最好的方法是始终发送一个数组或使用两个不同的 FormRequest,因为它们正在做两件不同的事情(创建一条记录与创建多条记录)。

以上是关于如何使用请求验证 Laravel 中的数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何使唯一数组的自定义验证规则依赖于其他字段 laravel

如何验证 laravel 中的复选框数组?

如何验证 json 对象中的请求 - 使用 laravel

Laravel 验证 - 逗号分隔的字符串输入为数组

如何验证 REST Lumen/Laravel 请求中的参数?

电子邮件地址字段的值已被使用。 laravel 请求验证