使用laravel和mysql。我有name
,email
,password
和conform password
的用户更新表格,其中包含以下控制器验证信息,
$this->validate($request, [
'name' =>'required',
'email' => 'required|email',
'password' => 'sometimes|min:6|confirmed'
]);
在我的表单中,通常,用户不会更新所有输入字段。例如,某些用户只需要更新电子邮件。但是通过以上验证,当我们仅更新名称或电子邮件验证显示消息The password must be at least 6 characters.
时,如何仅更新名称或电子邮件而不更新密码?
答案 0 :(得分:1)
尝试以下代码:
$this->validate($request, [
'name' =>'required',
'email' => 'required|email',
]);
$name = $request->name ;
$email = $request->email;
$q = User::where('id','=',auth()->user()->id);
$q->update(['name'=>$name,'email'=>$email]);
if(isset($request->password)){
$this->validate($request,[
'password' => 'required|string|min:6|confirmed',
]);
$password = $request->password);
$q->update(['password'=>$password );
}
您也可以通过将更改密码以单独的形式放置来实现。
答案 1 :(得分:0)
使用if条件。用户提交表单时,请检查哪些字段为空,哪些字段不为空。如果该字段为空,则用户不想更新该信息,并且您不需要运行该字段的验证。我不是laravel专家,所以我无法发布任何演示代码。但是我在其他框架中使用了这种方法。
答案 2 :(得分:0)
尝试一下:
$validator = Validator::make($request->all(), [
'name' => 'required',
'email' => 'required|email',
]);
$validator->sometimes('password', 'min:6|confirmed', function ($input) {
return $input->password;
});
if(!$validator->fails()){
...
}
我不确定return $input->password
。我想,您应该使用return !empty($input->password)
。
如果密码为空,则不要应用该规则。
答案 3 :(得分:0)
您可以指定,仅当password
有值时才需要password_confirmation
,相反,只有当password_confirmation
作为值时才需要password
'name' => 'required',
'email' => 'required|email',
'password' => 'required_with:password_confirmation|min:6|confirmed',
'password_confirmation' => 'required_with:password',
在这种情况下,您可以更新名称,电子邮件并保持密码为空。 (不要忘记检查您何时更新用户)
如果用户填写密码,则需要至少输入6个字符来确认