0%

Laravel表单验证字段不为 null 的时候再验证

在 Laravel 表单验证中我们常常会需要对一些非必填的字段进行校验,比如:string

但是如果如果 data 里面的对应字段是 null,则验证会失败,比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$data = [
'num' => null
];

/** @var \Illuminate\Validation\Validator $validator */
$validator = app('validator')->make(
$data,
[
'num' => 'numeric'
]
);

if ($validator->fails()) {
dd($validator->messages()->toArray());
}

结果:

1
2
3
4
5
array:1 [
"num" => array:1 [
0 => "num字段值必须为数字"
]
]

如何让其通过验证?

如果我们的这个字段允许为 null 的话,可以加上 nullable 验证规则,比如:

1
2
3
$rules = [
'num' => 'nullable|numeric'
]

当然如果保存到数据库的时候不能为 null 的话,就不能这么写了。