Ste*_*978 9 php validation laravel
我正在尝试验证密码字段,只有它存在.我想允许某人编辑用户,他们可能想要也可能不想更改用户密码.所以我认为我可以使用Laravels验证规则,特别是"有时"规则.我有这套规则:
$this->validate($request, [
'password' => 'sometimes|required|min:8',
]);
Run Code Online (Sandbox Code Playgroud)
这是简化的示例,通常会有其他字段的其他规则和更严格的密码规则.我希望这只应用min:8规则,如果传递的数据中存在密码字段,但如果我将密码字段留空,我会收到验证错误,说明密码字段是必需的.
我不确定我在文档中没有理解什么.我是否需要在验证之前手动删除密码字段,如果表单输入提交为空这样?
$data = $request->all();
if ('' === $data['password']) {
unset($data['password'])
}
Run Code Online (Sandbox Code Playgroud)
...然后将数组传递给验证器.我认为这是有道理的,但我可以做一些确认,我正确理解它.提前致谢.
Cle*_*ode 12
我想我们应该告诉laravel如果密码不是空的,那么规则就是什么都不做.
$this->validate($request, [
'password' => $request->password != null ?'sometimes|required|min:8': ''
]);
Run Code Online (Sandbox Code Playgroud)
文档没有说清楚,但删除必需使它工作.
$this->validate($request, [
'password' => 'sometimes|min:8',
]);
Run Code Online (Sandbox Code Playgroud)
“我试图仅在密码字段存在时才对其进行验证。”
为此,您可以在验证系统中使用“可为空”规则。
例如:
$this->validate($request, [
'password' => 'sometimes|nullable|min:8',
]);
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请查看“关于可选字段的说明”下的https://laravel.com/docs/5.6/validation部分
这是一个老问题,但上面的答案有很多混乱。这是目前谷歌上关于“有时验证规则”的第一个结果,所以我希望我能为其他谷歌用户澄清一些事情:
规则的sometimes运作方式如下:
请注意,不存在意味着该字段从未提交( isset($_POST['password']) === false),它与使用空字符串或 null 或 0 值提交的字段不同 - 因此
'sometimes|required|min:8'仅当表单根本没有密码字段时才有效,或者它已被禁用,因此永远不会提交。
如果密码字段存在,只是留空,然后提交表单,我们仍然会得到它,'password' => null因为sometimes这意味着它存在,因此将应用其余规则(并且由于必填字段不能为空,因此请求将失败) 。
OP真正需要的是:
'password' => 'nullable|min:8',
Run Code Online (Sandbox Code Playgroud)
假设密码字段始终存在于请求中,只是有时其值可以留空。