2015-11-20 102 views
0

讓我們說我有這樣的JSON請求到我的Laravel路由驗證第二級陣列/ JSON使用Laravel驗證

{ 
    "user_id":1, 
    "payment_type":"point", 
    "order_boxes":[ 
     { 
      "for_friend_name":"Yansen", 
      "order_box_items":[ 
       { 
        "product_id": 1, 
       }  
      ] 
     }  
    ] 
} 

我可以驗證請求最多使用此代碼使用Laravel驗證「order_boxes」陣列級別:

$rules = [ 
      'user_id' => 'required|exists:users,id', 
      'payment_type' => 'required|in:point,cod,transfer,credit_card', 
      'order_boxes' => 'required|array', 
     ]; 

     $validator = Validator::make($request->all(), $rules); 
     $validator->each('order_boxes',[ 
      'for_friend_name' => ['max:25'], 
      'order_box_items' => ['required','array'] 
     ]); 

正如您在「order_boxes」裏面看到的「order_box_items」那樣,我添加了另一個「數組」規則並嘗試再次驗證數組。我添加下面的代碼如下:

$validator->each('order_box_items',[ 
    'product_id' => ['required','exists:products,id'] 
]); 

但它返回「屬性爲每個()必須是一個數組」。

所以我相信$ validator-> each()只能驗證數組的第一級。任何想法如何驗證數組的第二級使用它?

謝謝

+0

不是驗證器方面的專家,但驗證器如果不在'$ request-> all'的根目錄下如何提取''order_box_items''的值? – Amarnasan

回答

0

我設法通過使用 「的foreach」 以驗證嵌套數組:

$rules = [ 
    'user_id' => 'required|exists:users,id', 
    'payment_type' => 'required|in:point,cod,transfer,credit_card', 
    'order_boxes' => 'required|array', 
]; 

foreach($request->input('order_boxes') as $key => $value){ 
    $rules['order_boxes.'.$key.'.for_friend_name'] = 'max:25'; 
    $rules['order_boxes.'.$key.'.order_box_items'] = 'required|array'; 

    foreach($request->input('order_boxes')[$key]['order_box_items'] as $item_key => $item_value){ 
     $rules['order_boxes.'.$key.'.order_box_items.'.$item_key.'.product_id'] = 'required|exists:products,id'; 
    } 
}