为什么Laravel不关心数组输入验证?

时间:2018-08-07 12:21:54

标签: php laravel validation

这是我的验证人:

$validator = Validator::make($request->all(), [
   'considerations' => 'required',
   'product_id.*'  => "required"
]);

它也验证considerations。如果$request缺少considerations项,则会抛出:

  

注意事项字段为必填字段。

哪个是对的。但是它并不关心product_id。如果我不发送该参数,它也会通过验证。仅当我发送product_id[0]并且没有任何值时,它将引发错误。然后它将抛出:

  

product_id.0字段为必填字段。

但是,如果我不发送product_id参数,则它不会在乎,也不会引发任何错误。为什么?我该如何解决?

3 个答案:

答案 0 :(得分:2)

看起来您的验证规则等同于说

“如果提供了product_id字段,请确保product_id数组的所有内容都具有一个值”

我会在验证数组中添加另一条规则 { "presets": ["env"] } ,该规则应确保product_id关键字也位于发布字段中。

答案 1 :(得分:1)

您必须对product_id本身进行验证。例如

$validator = Validator::make($request->all(), [
   'considerations' => 'required',
   'product_id'  => "required|array",
   'product_id.*'  => "required"
]);

答案 2 :(得分:1)

您可以这样使用

        $rules =   ['considerations' => 'required',
                   'product_id-token' => 'required|array'];
        $message = ['considerations.required' => 'Your validation message',
                   'product_id-token.required' => 'Your validation message',];

        $validator = Validator::make($request->input(), $rules, $message);