【发布时间】:2021-07-07 06:48:21
【问题描述】:
我已经完成了一个 Laravel 项目,用户可以使用姓名电子邮件密码更新他们的个人资料 在更新用户个人资料时,我收到 Integrity constraint violation: 1062 Duplicate entry 与电子邮件, 在用户表中电子邮件是唯一的...我如何使用“电子邮件已被占用”消息处理此错误,这样就不会引发查询异常错误 这是我的刀片文件
<div class="form-group row">
<label for="exampleInputEmail1" class="col-sm-2 col-form-label">
Email
</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="exampleInputEmail1" value="{{ (isset($user_update)) ? pdate->email : '' }}" name="email" placeholder="Enter Your Email Here">
</div>
@error('email')
<span class="invalid-feedback" role="alert">
<strong>
{{ $message }}
</strong>
</span>
@enderror
</div>
这是我的用户更新方法的控制器
public function update(UpdateRequestUser $request, User $user) {
$password=Auth::user()->password;
$oldpassword=$request->old_password;
$newpassword=$request->new_password;
$confirmpassword=$request->confirm_password;
if(Hash::check($oldpassword, $password)) {
if($newpassword===$confirmpassword) {
$user = Auth::user();
$user->password=Hash::make($newpassword);
$user->name=$request->name;
$user->email=$request->email;
$user->save();
Auth::logout();
toastr()->success('password changed successfully');
return redirect()->route('login');
} else {
toastr()->info('password missmatch');
return redirect()->back();
}
}
if(!(Hash::check($oldpassword, $password))) {
toastr()->info('Old password missmatch');
return redirect()->back();
}
//
}
我的验证请求规则是
return [
'name'=>'required',
'email'=>'required',
'confirm_password'=>'required',
'new_password'=>'required',
'old_password'=>'required',
//
];
我想以电子邮件已被接收的形式显示错误消息,以便我的运行时项目将来不会显示查询异常... 配置文件更新方法在不更新电子邮件的情况下工作正常...我只想显示上面提到的错误消息
【问题讨论】:
-
'email'=>'required|unique',这里unique在验证中缺失 -
我明白你想说什么......添加 **'email'=>'required|unique 将按预期抛出错误消息......使用该用户甚至无法更新他们的姓名密码
-
** 'email' => 'required|unique:users,email,'.$this->route('user')->id ** 将其更改为验证已解决此问题
标签: php laravel controller laravel-blade