2015-11-29 156 views
1

我有一个laravel窗体来更新数据库中的现有用户信息,但如果该窗体中的字段为空,我不希望它更新数据库中的该记录。现在,如果该字段为空并且表单已提交,它将传递该空白输入并删除数据库中的记录。Laravel验证通过空白输入

下面是编辑用户信息然后执行数据库更新的功能。我目前将Request :: old('...')附加到电子邮件中,但由于验证是'unique:users',它会给出错误'发送电子邮件'。

感谢,

public function postEdit(Request $request) 
{ 
    $this->validate($request, [ 
     'email' => 'unique:users|email|max:255', 
     'password' => 'min:6', 
     'confirm_password' => 'same:password', 
     'about_me' => 'max:500', 
    ]); 

    Auth::user()->update([ 


     'email' => $request->input('email'), 
     'password' => bcrypt($request->input('password')), 
     'confirm_password' => bcrypt($request->input('confirm_password')), 
     'about_me' => $request->input('about_me'), 
    ]); 

    return redirect()->route('profile.edit')->with('info', 'You have updated your profile!'); 
} 
+0

如果用户删除的信息,那么就意味着他要的字段设置为空白。没有? – itachi

+0

那么,他们需要在系统中的电子邮件地址。因此,这些选项将(1)使该字段成为必需,但具有验证,如果该电子邮件与该用户的当前数据库记录相同,则验证不会发生错误,或者(2)允许该字段为空,如果是这样,只保留当前数据库记录并且不要将其设置为''。 –

+0

唯一接受第三个参数。通过该参数中的用户标识,它将检查唯一的电子邮件,尽管相关用户中的字段将被跳过。 – itachi

回答

1

您需要修改unique规则才能排除您正在编辑的记录。

而不是

'email' => 'unique:users|email|max:255', 

你应该使用:

'email' => 'unique:users,email,'. Auth::user()->id.'|email|max:255', 

Reference for unique rule

+0

谢谢,我正在寻找验证规则中的“except”,但没有看到它在“unique”下列出。 –

0

在你可以设置验证规则 '必要',这必须帮助。

+0

没错,但问题是如果该字段是必需的,并且用户想要保持该电子邮件相同,那么它将在电子邮件已被采用时返回错误。 –

+0

我在这种情况下看到2个选项。 1)从验证程序中删除唯一的规则并检查这种手动方式。 2)在这种情况下,用户必须被授权。写另一个规则,它将结合独特的规则,并检查授权用户电子邮件是否与输入相同。 – EchoUA