如何在 Laravel 中验证阵列?

2022-08-30 06:37:24

我尝试在Laravel中验证阵列POST:

$validator = Validator::make($request->all(), [
    "name.*" => 'required|distinct|min:3',
    "amount.*" => 'required|integer|min:1',
    "description.*" => "required|string"
             
]);

我发送空的POST并得到这个作为.这意味着验证是正确的,但事实并非如此。if ($validator->fails()) {}False

如何在 Laravel 中验证阵列?当我提交表格时input name="name[]"


答案 1

星号符号 (*) 用于检查数组中的,而不是数组本身。

$validator = Validator::make($request->all(), [
    "names"    => "required|array|min:3",
    "names.*"  => "required|string|distinct|min:3",
]);

在上面的示例中:

  • “names”必须是至少包含 3 个元素的数组,
  • “names” 数组中的必须是不同的(唯一的)字符串,长度至少为 3 个字符。

编辑:从Laravel 5.5开始,您可以直接在Request对象上调用valid()方法,如下所示:

$data = $request->validate([
    "name"    => "required|array|min:3",
    "name.*"  => "required|string|distinct|min:3",
]);

答案 2

我有这个数组作为来自HTML + Vue的请求数据.js数据网格/表:

[0] => Array
    (
        [item_id] => 1
        [item_no] => 3123
        [size] => 3e
    )
[1] => Array
    (
        [item_id] => 2
        [item_no] => 7688
        [size] => 5b
    )

并用它来验证哪个工作正常:

$this->validate($request, [
    '*.item_id' => 'required|integer',
    '*.item_no' => 'required|integer',
    '*.size'    => 'required|max:191',
]);

推荐