我正在使用用户登录进行laravel项目。管理员可以创建新用户并编辑现有用户。我在update-user-form中有一个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',
];
}
答案 0 :(得分:1)
如果您想仅在字段存在时验证字段,请在这种情况下使用sometimes
验证规则。
为sometimes
&添加password
验证passwordConfirm
。从$data
;
update()
行
// 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
答案 1 :(得分:0)
我总是在我的项目中这样做:
//Your UserController file
public function update(User $user, UserRequest $request) {
$user->update($request->all());
return redirect('/users');
}
//Your UserRequest file
public function rules() {
$rules= [
'firstname' => 'required|string|max:255',
'lastname' => 'required|string|max:255',
'email' => 'required|string|email|max:255'
];
if($this->method()=="POST"){
$rules['password']='sometimes|required|string|min:6';
$rules['passwordConfirm']='sometimes|required_with:password|same:password';
}
return $rules;
}
因此,您可以看到您的方法是 POST ,这意味着您要添加新用户,以便它要求输入密码和密码确认,但是如果您的方法是 PATCH < / strong>或 PUT 表示您无需验证密码和密码确认。
希望有所帮助