php - Laravel 仅在设置密码后更新密码

标签 php laravel validation

我正在开发一个用户登录的 laravel 项目。管理员可以创建新用户和编辑现有用户。我在更新用户表单中有一个 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',
    ];
}

最佳答案

如果您只想在字段存在时验证它,那么在这种情况下使用有时验证规则。

passwordpasswordConfirm 添加有时 验证。从 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/

相关文章:

javascript - ScriptManager.RegisterClientScriptBlock 不适用于 UpdatePanel

php - 登录页面无法使用有效凭据(PHP 和 MySQL)

php - 无法在 PHPUnit 中使用数据提供程序运行单个测试

php - CMS 中的 Markdown 与 HTML

php - JOIN 同一表中的类别和子类别

php - Laravel 搜索工具不提供输出

Laravel 通知作业由主管多次运行

php - 如何在 Laravel 验证失败和通过验证时创建回调?

php 验证从 html 输入中删除数据

php - Laravel 5.2 验证检查值是否不等于变量