使用Laravel Validator验证第二级数组/ JSON

时间:2015-11-20 04:41:50

标签: validation laravel

假设我有一个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()只能验证数组的第一级。关于如何使用它来验证数组的第二级的任何想法?

谢谢

2 个答案:

答案 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这样的解决方案。