假设我有一个JSON请求到我的Laravel路线
{
"user_id":1,
"payment_type":"point",
"order_boxes":[
{
"for_friend_name":"Yansen",
"order_box_items":[
{
"product_id": 1,
}
]
}
]
}
我可以使用以下代码使用Laravel Validator验证请求到“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 :(得分: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';
}
}
答案 1 :(得分:0)
此功能will be added in Laravel 5.2。在此之前使用像@YansenTan这样的解决方案。