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

GTM*_*eor 9 laravel laravel-5

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

我只是试图让它验证,如果它被传递为非null,没有,甚至"有时"工作:/

我试图验证为:

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

但它未能验证......:/ ANy帮助将不胜感激.

小智 21

也许你在寻找'可空'

'test'=> 'nullable|min:6'
Run Code Online (Sandbox Code Playgroud)


nix*_*xxx 7

虽然这个问题有点老,但这就是你应该怎么做。你不需要在这么简单的事情上用这么多代码努力奋斗。

您需要同时具有可空性,有时还需要在验证规则上,例如:

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

以上仅在该字段具有某些值时才进行验证,如果没有,或者它通过 null 则忽略。这很好用。


sum*_*mit 3

不要在验证器上传递“必需”

验证如下

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

仅当密码存在时,上述验证器才会接受密码,但密码应在 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;
Run Code Online (Sandbox Code Playgroud)

这里的追踪器可能有也可能没有SIM卡号,如果有的话将会有8到15个字符错误

更新

如果您仍然想传递硬编码的“NULL”值,请在验证器中添加以下内容

$str='NULL';
$rules = [
    password => 'required|not_in:'.$str,
];
Run Code Online (Sandbox Code Playgroud)