我正在开发一个用户登录的 laravel 项目。管理员可以创建新用户和编辑现有用户。我在更新用户表单中有一个 password
和一个 passwordConfirm
字段。如果管理员在表单中输入新密码,它应该检查验证并更新数据库中的记录。如果不是,则不应更改密码(保留旧密码),而应更新其他用户数据(如名字)。
如果我尝试发送带有空 password
和 passwordConfirm
字段的表单,它不会通过验证。我得到一个验证错误,密码必须是一个字符串并且至少有 6 个字符长,但我不知道为什么。似乎我的更新函数的第一行将被忽略。
UserController.php
public function update(User $user, UserRequest $request) {
$data = $request->has('password') ? $request->all() : $request->except(['password', 'passwordConfirm']);
$user->update($data);
return redirect('/users');
}
UserRequest.php
public function rules() {
return [
'firstname' => 'required|string|max:255',
'lastname' => 'required|string|max:255',
'email' => 'required|string|email|max:255',
'password' => 'string|min:6',
'passwordConfirm' => 'required_with:password|same:password',
];
}
最佳答案
如果您只想在字段存在时验证它,那么在这种情况下使用有时
验证规则。
为 password
和 passwordConfirm
添加有时
验证。从 update()
中删除 $data
行;
// UserController.php
public function update(User $user, UserRequest $request) {
$user->update($request->all());
return redirect('/users');
}
// UserRequest.php
public function rules() {
return [
'firstname' => 'required|string|max:255',
'lastname' => 'required|string|max:255',
'email' => 'required|string|email|max:255',
'password' => 'sometimes|required|string|min:6',
'passwordConfirm' => 'sometimes|required_with:password|same:password',
];
}
引用 - https://laravel.com/docs/5.4/validation#conditionally-adding-rules
关于php - Laravel 仅在设置密码后更新密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45252667/