我认为最简单的方法是创建自己的验证规则。它可能看起来像这样:
我认为最简单的方法是创建自己的验证规则。它可能看起来像这样。
Validator::extend('empty_if', function($attribute, $value, $parameters, Illuminate\Validation\Validator $validator) {
$fields = $validator->getData();
foreach($parameters as $param) {
$excludeValue = array_get($fields, $param, false);
if($excludeValue) {
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]];
return str_replace([':attribute', ':other'], $replace, $message);
});
required_without
,它可以正常工作。你能发布一下你的route
规则吗?我的规则是return ['route' => "required_without:url", 'url' => "required_without:route|url"];
,对我来说效果很好。 - Ben Swinburne