首页 文章

如何在Laravel中验证数组?

提问于
浏览
53

我尝试在Laravel中验证数组POST:

$validator = Validator::make($request->all(), [
            "name.*" => 'required|distinct|min:3',
            "amount.*" => 'required|integer|min:1',
            "description.*" => "required|string"

        ]);

我发送空POST并将此 if ($validator->fails()) {} 作为 False . 这意味着验证是正确的,但事实并非如此 .

如何在Laravel中验证数组?当我用 input name="name[]" 提交表格时

4 回答

  • 1

    星号(*)表示您要检查数组中的VALUES,而不是实际的数组 .

    $validator = Validator::make($request->all(), [
        "name"    => "required|array|min:3",
        "name.*"  => "required|string|distinct|min:3",
    ]);
    

    在上面的例子中:

    • "Name"必须是包含至少3个元素的数组 .

    • "name"数组中的值必须是不同的(唯一)字符串,长度至少为3个字符 .


    EDIT: 从Laravel 5.5开始,您可以直接在Request对象上调用validate()方法,如下所示:

    $data = $request->validate([
        "name"    => "required|array|min:3",
        "name.*"  => "required|string|distinct|min:3",
    ]);
    
  • 131

    我有这个数组作为我的HTML Vue.js数据网格/表中的请求数据:

    [0] => Array
        (
            [item_id] => 1
            [item_no] => 3123
            [size] => 3e
        )
    [1] => Array
        (
            [item_id] => 2
            [item_no] => 7688
            [size] => 5b
        )
    

    并使用它来验证哪些工作正常:

    $this->validate($request, [
        '*.item_id' => 'required|integer',
        '*.item_no' => 'required|integer',
        '*.size'    => 'required|max:191',
    ]);
    
  • 3

    编写验证和授权逻辑的推荐方法是将该逻辑放在单独的请求类中 . 这样您的控制器代码将保持清洁 .

    你可以通过执行 php artisan make:request SomeRequest 来创建一个请求类

    在Request类的rules()方法中定义验证规则

    public function rules()
    {
       return [
        "name"    => "required|array|min:3",
        "name.*"  => "required|string|distinct|min:3",
      ];
    }
    

    在你的控制器中写这样的路由功能

    public function someFunction(SomeRequest $request) 
    {
      //your controller logic goes here
    }
    
  • 13

    您必须循环输入数组并为每个输入添加规则,如下所述:Loop Over Rules

    这是你的一些代码:

    $input = Request::all();
    $rules = [];
    
    foreach($input['name'] as $key => $val)
    {
        $rules['name.'.$key] = 'required|distinct|min:3';
    }
    
    $rules['amount'] = 'required|integer|min:1';
    $rules['description'] = 'required|string';
    
    $validator = Validator::make($input, $rules);
    
    //Now check validation:
    if ($validator->fails()) 
    { 
      /* do something */ 
    }
    

相关问题