我有一些验证需要网址或一条路线,但不是两者。
$this->validate($request, [
'name' => 'required|max:255',
'url' => 'required_without_all:route|url',
'route' => 'required_without_all:url|route',
'parent_items'=> 'sometimes|required|integer'
]);
我尝试过使用required_without
和required_without_all
,但他们都已通过验证,我不确定原因。
route
是route
字段
答案 0 :(得分:7)
我认为您正在寻找required_if
:
如果 anotherfield 字段等于任何值,则必须存在验证字段。
因此,验证规则是:
$this->validate($request, [
'name' => 'required|max:255',
'url' => 'required_if:route,""',
'route' => 'required_if:url,""',
'parent_items'=> 'sometimes|required|integer'
]);
答案 1 :(得分:4)
我认为最简单的方法是创建自己的验证规则。它可能看起来像。
Validator::extend('empty_if', function($attribute, $value, $parameters, Illuminate\Validation\Validator $validator) {
$fields = $validator->getData(); //data passed to your validator
foreach($parameters as $param) {
$excludeValue = array_get($fields, $param, false);
if($excludeValue) { //if exclude value is present validation not passed
return false;
}
}
return true;
});
并使用它
$this->validate($request, [
'name' => 'required|max:255',
'url' => 'empty_if:route|url',
'route' => 'empty_if:url|route',
'parent_items'=> 'sometimes|required|integer'
]);
P.S。不要忘记在提供商处注册。
修改强>
添加自定义消息
1)添加消息 2)添加替换剂
Validator::replacer('empty_if', function($message, $attribute, $rule, $parameters){
$replace = [$attribute, $parameters[0]];
//message is: The field :attribute cannot be filled if :other is also filled
return str_replace([':attribute', ':other'], $replace, $message);
});