如何验证请求值,当它应该是字符串或数组都有效?
'val' => 'bail|required|string'
'val' => 'bail|required|array'
验证表达式是什么?
我认为没有一种方法可以使用开箱即用的验证规则来实现它。您将需要使用自定义验证规则来实现这一点:
在AppServiceProvider
的boot
法中,加入
public function boot()
{
Validator::extend('string_or_array', function ($attribute, $value, $parameters, $validator) {
return is_string($value) || is_array($value);
});
}
那么你就可以开始使用了:
'val' => 'bail|required|string_or_array'
您可以选择设置自定义验证错误消息,或者使用自定义验证类来实现它。查看上面的文档链接获取更多信息
@lionel-chan提供的解决方案是最优雅的方法,但您也可以通过检查变量的类型来添加适当的规则,如:
$string_or_array_rule = is_array($inputs['val']) ? 'array' : 'string'
"val" => "bail|required|{$string_or_array_rule}"
只把@Krezo的答案改成了三元运算符
'val' => ['bail','required',function($attribute, $value, $fail) {
is_array($value) || is_string($value)?: $fail("Must be array or string");
}],
使用闭包
"val" => [function($attribute, $value, $fail) {
if (!(is_array($value) || is_string($value))) $fail("$attribute must be array or string");
}]