我正在尝试验证密码字段,只要它存在。我想允许某人编辑用户,他们可能想要也可能不想更改用户密码。所以我认为我可以使用Laravels验证规则,特别是'有时候'规则。我有这套规则:
$this->validate($request, [
'password' => 'sometimes|required|min:8',
]);
这是简化的示例,通常会有其他字段的其他规则和更严格的密码规则。我希望这只应用min:8规则,如果传递的数据中存在密码字段,但如果我将密码字段留空,则会收到验证错误,说明密码字段是必需的。
我不确定我在文档中没有理解的内容。我是否需要在验证之前手动删除密码字段,如果表单输入是否为空提交?
$data = $request->all();
if ('' === $data['password']) {
unset($data['password'])
}
...然后将数组传递给验证器。我认为这是有道理的,但我可以做一些确认,我正确理解它。提前谢谢。
答案 0 :(得分:12)
我认为我们应该告诉laravel如果密码不是空的,则规则否则什么也不做。
$this->validate($request, [
'password' => $request->password != null ?'sometimes|required|min:8': ''
]);
答案 1 :(得分:7)
文档没有明确说明,但删除所需的功能会使其正常工作。
.controller('ExampleController', function($scope) {
$scope.condition = '1';
$scope.profiles = [{
account: {
membership: "free"
}
},
{
account: {
membership: "premium"
}
},
{
account: {
membership: "unknow"
}
}];});
答案 2 :(得分:3)
我认为,只有当用户提供旧密码时才允许用户更改密码通常更安全。
允许连接的用户在不提供旧密码的情况下更改密码可能是一个安全问题。
这通常是我允许用Laravel更改用户密码的方法:
$this->validate($request, [
'user.old_password' => [],
'user.password' => [
'required_with:user.old_password',
'min:6',
'confirmed',
'regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*([-+_!@#$%^&*.,;?])).+$/',
'different:user.old_password'
],
'user.password_confirmation' => ['required_with:user.password'],
]);
这不会验证旧密码,因为我们不在乎,数据库会为我们检查,但我只在提供旧密码时验证新密码。
答案 3 :(得分:2)
在编辑模式下,您填写密码字段,例如“********”,并在更新模式下验证,如此
$this->validate($request, [
'password' => 'required|min:8',
]);
并在控制器中检查$data['password']='********'
找到旧密码和
$data['password']='old password in db'
和$data['password']!='********'
更新pssword
答案 4 :(得分:2)
作为所选答案的选项,您可以使用:
$this->validate($request, [
'password' => 'nullable|min:8',
]);
答案 5 :(得分:2)
“仅在存在密码字段时,我才尝试对其进行验证。”
为此,您可以在验证系统中使用“空”规则。
例如:
$this->validate($request, [
'password' => 'sometimes|nullable|min:8',
]);
有关更多信息,请查看“关于可选字段的注释”下的https://laravel.com/docs/5.6/validation部分
答案 6 :(得分:0)
Laravel有时会验证规则及其功能:
<强>接受强> 验证字段必须为yes,on,1或true。这有助于验证“服务条款”的接受程度。
<强> active_url 强> 根据dns_get_record PHP函数,验证字段必须具有有效的A或AAAA记录。
<强>后:日期强> 验证字段必须是给定日期之后的值。日期将传递到strtotime PHP函数: 'start_date'=&gt; “需要|日期|后:明天 您可以指定另一个要与日期进行比较的字段,而不是传递要由strtotime评估的日期字符串: 'finish_date'=&gt; '所需|日期|后:日期'
<强> after_or_equal:日期强> 验证字段必须是等于或等于给定日期的值。有关更多信息,请参阅后规则。
<强>阿尔法强> 验证字段必须完全是字母字符。