Laravel仅在设置时更新密码

时间:2017-07-22 08:57:41

标签: php laravel validation

我正在使用用户登录进行laravel项目。管理员可以创建新用户并编辑现有用户。我在update-user-form中有一个password和一个passwordConfirm字段。如果管理员在表单中放入新密码,则应检查验证并更新数据库中的记录。如果没有,它不应该更改密码(保留旧密码),但更新其他用户数据(如名字)。

如果我尝试发送包含空passwordpasswordConfirm字段的表单,则表示无法验证。我收到验证错误,密码必须是一个字符串,长度至少为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',
    ];
}

2 个答案:

答案 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 表示您无需验证密码和密码确认。

希望有所帮助