2017-02-15 46 views
10

我嘗試驗證陣列POST在Laravel:如何驗證Laravel中的數組?

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

     ]); 

我發送空POST和GET這if ($validator->fails()) {}False。這意味着驗證是真實的,但事實並非如此。

如何驗證Laravel中的數組?當我提交表格input name="name[]"

回答

30

星號(*)表示您希望檢查數組中的VALUES而不是實際的數組。

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

在上面的例子:

  • 名稱必須與3種元素的最小的陣列。
  • 「name」數組中的值必須是不同的(唯一)字符串,至少3個字符。
1

你必須循環輸入數組,這裏描述添加規則對於每個輸入: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 */ 
} 
+2

沒有必要那樣做 - https://laravel.com/docs/5.4/validation#validating-arrays – Laran

+0

啊,我明白了。謝謝你,先生。 –

0

我有這個數組作爲我的從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', ]);