我有一个字段"图像",类型是文件,只需要验证是否选择了图像,这意味着它也可以为空。
我试过了:'avatar' => 'mimes:jpeg,jpg,png,gif|max:100000',
但这也是必需的。
我仍然尝试使用参数 present
和 sometimes
,但该字段仍然是必需的。
如何仅在选择图像时对其进行验证?
- 如果要使用的输入数组中可能不存在"头像"字段:
'avatar' => 'sometimes|mimes:jpeg,jpg,png,gif|max:100000'
在某些情况下,您可能希望仅当输入数组中存在某个字段时才对该字段运行验证检查。若要快速完成此操作,请添加有时规则。
- 如果"头像"字段绝对在输入数组中,并且它的值将是
null
你想使用:
'avatar' => 'nullable|mimes:jpeg,jpg,png,gif|max:100000'
验证中的字段可能为空。这在验证基元(如可以包含 null 值的字符串和整数)时特别有用。若要快速完成此操作,请添加可为 null 的规则。
在您的情况下,您只需检查它是否存在 null - 验证 当有值时。所以使用sometimes
"在某些情况下,您可能希望针对 仅当输入数组中存在该字段时才使用该字段。要快速 完成此操作后,将有时规则添加到规则列表中"
$v = Validator::make($data, array(
'email' => 'sometimes|required|email',
));
在您的情况下,
$v = Validator::make($data, array(
'avatar' => 'sometimes|mimes:jpeg,jpg,png,gif|max:100000',
));
注意:
下面的代码不会做任何事情,因为没有要验证的规则,因为即使它存在于 POST 数组中,你也应该指定规则。 并且没有任何区别。
$v = Validator::make($data, array(
'avatar' => 'sometimes',
));
您可以在规则中尝试'nullable'
。
https://laravel.com/docs/5.3/validation#rule-nullable
首先检查$request
对象。检查您的请求中是否有可用的avatar
。然后试试这个:
'avatar' => 'sometimes|image|mimes:jpeg,bmp,png,gif|max:2048'
我发现最有效的解决方案是使用Rule::requiredIf
'cover' => [
'image',
Rule::requiredIf(function () {
if (some_condition) {
return false;
}
return true;
})
]