【发布时间】:2017-03-27 05:44:36
【问题描述】:
如果请求值应该是字符串或数组都有效,如何验证?
'val' => 'bail|required|string'
'val' => 'bail|required|array'
验证表达式是什么?
【问题讨论】:
标签: php laravel validation request
如果请求值应该是字符串或数组都有效,如何验证?
'val' => 'bail|required|string'
'val' => 'bail|required|array'
验证表达式是什么?
【问题讨论】:
标签: php laravel validation request
int OR array of int
的字段验证示例'id' => [
function ($attribute, $value, $fail) {
if (!is_array($value) && !is_numeric($value)) {
$fail('validation.int|int[]');
}
if (is_numeric($value) && (int)$value < 1) {
$fail('validation.min.numeric');
}
},
],
'id.*' => 'int|min:1',
【讨论】:
只使用闭包
"val" => [function($attribute, $value, $fail) {
if (!(is_array($value) || is_string($value))) $fail("$attribute must be array or string");
}]
【讨论】:
@lionel-chan 提供的解决方案是最优雅的方式,但您也可以通过检查变量的类型来添加适当的规则:
$string_or_array_rule = is_array($inputs['val']) ? 'array' : 'string'
"val" => "bail|required|{$string_or_array_rule}"
【讨论】:
我认为没有办法使用开箱即用的验证规则来实现它。您需要使用Custom Validation Rules 来实现:
在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'
您可以选择设置自定义验证错误消息,或使用自定义验证类来实现它。查看上面的文档链接了解更多信息。
【讨论】: