2015-11-20 134 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'; 
    } 
}