Laravel 仅在设置时更新密码

mhe*_*ier 1 php validation laravel

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

如果我试图用一个空的发送形式passwordpasswordConfirm领域,它不验证。我收到验证错误,密码必须是字符串且长度至少为 6 个字符,但我不知道为什么。似乎我的更新函数的第一行将被忽略。

用户控制器.php

public function update(User $user, UserRequest $request) {

    $data = $request->has('password') ? $request->all() : $request->except(['password', 'passwordConfirm']);

    $user->update($data);

    return redirect('/users');
}
Run Code Online (Sandbox Code Playgroud)

用户请求文件

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',
    ];
}
Run Code Online (Sandbox Code Playgroud)

Gan*_*esh 5

如果您只想在某个字段存在时对其进行sometimes验证,请在这种情况下使用验证规则。

sometimes验证添加到password& passwordConfirm$dataupdate(); 中删除该行

// 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',
    ];
}
Run Code Online (Sandbox Code Playgroud)

参考 - https://laravel.com/docs/5.4/validation#conditionally-adding-rules

  • 它不起作用。发送带有空“密码”和空“密码确认”字段的表单后,我收到一个错误,提示“密码”字段是必需的。 (2认同)