Ian*_*Ian 4 php laravel laravel-5 laravel-validation laravel-5.1
我有一些验证需要一个url 或路由,但不是两个.
$this->validate($request, [
'name' => 'required|max:255',
'url' => 'required_without_all:route|url',
'route' => 'required_without_all:url|route',
'parent_items'=> 'sometimes|required|integer'
]);
Run Code Online (Sandbox Code Playgroud)
我尝试过使用required_without,required_without_all但他们都通过验证,我不知道为什么.
route是该route领域的一项规则
我想你正在寻找required_if:
如果anotherfield字段等于任何值,则必须存在验证字段.
因此,验证规则是:
$this->validate($request, [
'name' => 'required|max:255',
'url' => 'required_if:route,""',
'route' => 'required_if:url,""',
'parent_items'=> 'sometimes|required|integer'
]);
Run Code Online (Sandbox Code Playgroud)
我认为最简单的方法是创建自己的验证规则。它可能看起来像。
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;
});
Run Code Online (Sandbox Code Playgroud)
并使用它
$this->validate($request, [
'name' => 'required|max:255',
'url' => 'empty_if:route|url',
'route' => 'empty_if:url|route',
'parent_items'=> 'sometimes|required|integer'
]);
Run Code Online (Sandbox Code Playgroud)
PS 不要忘记在您的提供商中注册。
编辑
添加自定义消息
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);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6007 次 |
| 最近记录: |