Laravel 5.4验证规则 - 可选,但如果存在则经过验证;

时间:2017-02-18 18:29:22

标签: laravel laravel-5

我正在尝试通过表单创建用户更新验证,我在其中传递,例如'password'=> NULL,或'password'=>'newone';

我试图让它只是验证它是否作为非null传递,什么也没有,甚至'有时'不起作用:/

我正在尝试验证为:

Validator::make(array('test'=>NULL), array('test'=> 'sometimes|required|min:6'))->validate();

但它未能验证......:/我们将不胜感激。

6 个答案:

答案 0 :(得分:16)

也许您在寻找'nullable'

'test'=> 'nullable|min:6'

答案 1 :(得分:2)

我认为您正在寻找filledhttps://laravel.com/docs/5.4/validation#rule-filled

答案 2 :(得分:1)

  

不要通过' required'在验证器上

验证如下

$this->validate($request, [
    'username' => 'required|unique:login',
    'password' => 'between:8,20'
]);

以上验证器只有在存在时才接受密码但应在8到20之间

这就是我在用例中所做的

case 'update':
                $rules = [
                            'protocol_id' => 'required',
                            'name' => 'required|max:30|unique:tenant.trackers'.',name,' . $id, 
                            'ip'=>'required',
                            'imei' => 'max:30|unique:tenant.trackers'.',imei,' . $id, 
                            'simcard_no' => 'between:8,15|unique:tenant.trackers'.',simcard_no,' . $id, 

                            'data_retention_period'=>'required|integer'
                         ];  
            break;

此处跟踪器可能有也可能没有SIM卡号,如果有,则会出现8到15个字符错误

更新

  

如果您仍想传递硬编码的“空”'然后添加值   在验证器中跟随

$str='NULL';
$rules = [
    password => 'required|not_in:'.$str,
];

答案 3 :(得分:1)

虽然问题有点陈旧,但这就是你应该怎么做的。对于这么简单的事情,你不需要用如此多的代码来努力奋斗。

您需要同时使用nullable和验证规则,例如:

$this->validate($request, [
  'username' => 'required|unique:login',
  'password' => 'sometimes|nullable|between:8,20'
]);

上述内容仅在字段具有某个值时才会验证,如果没有,则忽略,或者如果它传递null。这很有效。

答案 4 :(得分:0)

相关的验证规则是:

  • 必填
  • 有时
  • 可空

所有都有其用途,可以在此处进行检查:

https://laravel.com/docs/5.8/validation#rule-required

如果您希望验证始终应用

https://laravel.com/docs/5.8/validation#conditionally-adding-rules

如果您想有时

应用验证规则

https://laravel.com/docs/5.8/validation#a-note-on-optional-fields

如果您希望属性也允许为空作为值

答案 5 :(得分:-1)

如果您故意发送null,请为验证创建if条件:

if ($request->test != null)
    Validator::make(array('test' => 'min:6'))->validate();
}