我正在尝试通过表单创建用户更新验证,例如传递 'password'=>NULL 或 'password'=>'newone';
我尝试仅在传递的参数不为空时进行验证,但是什么都行不通,甚至不是 'sometimes' :/
我希望进行以下验证:
Validator::make(
['test' => null],
['test' => 'sometimes|required|min:6']
)->validate();
但它未通过验证。
我正在尝试通过表单创建用户更新验证,例如传递 'password'=>NULL 或 'password'=>'newone';
我尝试仅在传递的参数不为空时进行验证,但是什么都行不通,甚至不是 'sometimes' :/
我希望进行以下验证:
Validator::make(
['test' => null],
['test' => 'sometimes|required|min:6']
)->validate();
但它未通过验证。
虽然这个问题有点老,但这就是你应该做的方式。对于这么简单的东西,你不需要在代码上花费太多精力。
你需要在验证规则上同时使用nullable和sometimes,例如:
$this->validate($request, [
'username' => 'required|unique:login',
'password' => 'sometimes|nullable|between:8,20'
]);
以上仅在字段有某些值时进行验证,如果没有值或传递了null,则会忽略。这种方式能够很好地实现。
$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个字符。
更新
如果您仍然想要传递硬编码的“NULL”值,则在验证器中添加以下内容
$str='NULL';
$rules = [
password => 'required|not_in:'.$str,
];
min:6
,它将检查该字段上的 null,并且 null 没有足够的字符,这将导致验证错误! - lewis4u
sometimes
要么使用required
,它们是互斥的。如果你只使用sometimes
,则只有在不为空时才会进行验证。 - Marco Aurélio Deleusometimes
也会导致测试失败 :/ 我想问题在于传递了NULL值... - GTMeteor