【问题标题】:Validate 2nd Level Array/JSON using Laravel Validator使用 Laravel 验证器验证二级数组/JSON
【发布时间】:2016-02-22 11:52:15
【问题描述】:

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

谢谢

【问题讨论】:

  • 不是验证器专家,但是如果'order_box_items'不在$request->all的根中,验证器如何提取它的值?

标签: validation laravel


【解决方案1】:

此功能will be added in Laravel 5.2。在此之前,请使用发布的 @YansenTan 之类的解决方案。

【讨论】:

    【解决方案2】:

    我设法通过使用“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';
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-23
      • 2018-02-23
      • 2016-09-01
      • 2017-09-24
      • 1970-01-01
      • 2015-01-31
      • 2019-02-21
      • 2018-01-03
      相关资源
      最近更新 更多