You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel Validation中排除更新场景下的密码验证规则

Laravel Form Request 差异化密码验证实现方案

验证类代码修改

通过判断当前请求的方法动态调整验证规则,修改后的UsersRequest代码如下:

namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;

class UsersRequest extends FormRequest
{
    public function rules()
    {
        // 通用验证规则
        $baseRules = [
            'avatar' => ['image', 'mimes:jpeg,jpg,png', 'max:700'],
            'second_name' => ['required', 'max:60'],
        ];

        // 新增用户(POST请求):密码必填
        if ($this->isMethod('post')) {
            $baseRules['password'] = ['required', 'confirmed', 'max:255'];
        }

        // 更新用户(PUT/PATCH请求):密码可选,提交才触发验证
        if ($this->isMethod('put') || $this->isMethod('patch')) {
            $baseRules['password'] = ['nullable', 'confirmed', 'max:255'];
        }

        return $baseRules;
    }
}

控制器逻辑配合

更新操作时需要过滤空的密码字段,避免空值覆盖原有加密密码:

public function update(UsersRequest $request, User $user)
{
    $validatedData = $request->validated();

    // 未提交新密码则移除字段,不更新密码
    if (empty($validatedData['password'])) {
        unset($validatedData['password']);
    } else {
        // 提交了新密码需先加密再存储
        $validatedData['password'] = bcrypt($validatedData['password']);
    }

    $user->update($validatedData);
    // 后续自定义返回逻辑
}

补充说明

如果希望只有请求中携带password字段时才触发验证,也可以将更新场景的密码规则替换为['sometimes', 'required', 'confirmed', 'max:255'],两种写法都可以满足需求,按需选择即可。


内容的提问来源于stack exchange,提问作者Shady Hesham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:57:01