验证值有两种可能的类型

问题描述 投票:0回答:4

当请求值应该是字符串或数组都有效时,如何验证请求值?

'val' => 'bail|required|string'
'val' => 'bail|required|array'

验证表达式是什么?

php laravel validation request
4个回答
13
投票

我认为没有办法使用开箱即用的验证规则来实现它。您需要使用自定义验证规则来实现此目的:

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'

您可以选择设置自定义验证错误消息,或使用自定义验证类来实现它。查看上面的文档链接以获取更多信息。


5
投票

@lionel-chan 提供的解决方案是最优雅的方式,但您也可以通过检查变量的类型来添加适当的规则:

$string_or_array_rule = is_array($inputs['val']) ? 'array' : 'string'

"val" => "bail|required|{$string_or_array_rule}"

2
投票

仅更改了@Krezo对三元运算符的答案

'val' => ['bail','required',function($attribute, $value, $fail) {
    (is_array($value) || is_string($value))?: $fail("Must be array or string");
}],

0
投票

只需使用闭包

"val" => [function($attribute, $value, $fail) {
         if (!(is_array($value) || is_string($value))) $fail("$attribute must be array or string");
     }]
© www.soinside.com 2019 - 2024. All rights reserved.