Laravel中如何修改用户信息?支持不修改密码时保留原密码
实现用户修改时不输入密码则保留原密码的验证规则
直接修改Request类里的rules()方法,通过判断密码字段是否被填写来动态添加验证规则:
public function rules() { // 基础必填字段验证,无论是否修改密码都需要满足 $rules = [ 'nom' => 'required', 'prenom' => 'required', 'username' => 'required', 'email' => 'required', 'groupe' => 'required', ]; // 只有当用户输入了密码时,才启用密码相关的验证规则 if ($this->filled('password')) { $rules['password'] = 'min:6'; $rules['cpassword'] = 'same:password|min:6'; } return $rules; }
逻辑说明:
- 先定义所有必填字段的基础规则,这些是用户修改信息时必须提供的内容。
- 用
$this->filled('password')检查请求中是否存在非空的密码值,存在的话才添加密码长度验证和确认密码匹配的规则。 - 这样当用户不输入密码时,密码和确认密码的验证不会触发,后端可以直接跳过密码更新,保留原密码。
配套的控制器更新逻辑参考
在处理用户更新的控制器方法里,记得只在密码字段存在时才更新密码:
public function update(UserUpdateRequest $request, User $user) { $validatedData = $request->validated(); // 处理密码:如果有输入密码就加密,否则移除密码相关字段 if (isset($validatedData['password'])) { $validatedData['password'] = Hash::make($validatedData['password']); unset($validatedData['cpassword']); // 确认密码不需要存入数据库 } else { unset($validatedData['password'], $validatedData['cpassword']); } $user->update($validatedData); return redirect()->route('users.index')->with('success', '用户信息更新成功'); }
内容的提问来源于stack exchange,提问作者Simon NIKIEMA
相关产品推荐
相关产品推荐

