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

Laravel 5.5自定义验证消息:密码修改表单开发实现

嘿,我来帮你把Laravel密码修改表单的验证规则和自定义错误消息配置完整,顺便给你讲讲实际怎么用起来~

Laravel密码修改表单验证与自定义错误消息配置

你已经搭好了基础的验证规则框架,咱们把错误消息补全,再梳理下完整的使用流程:

完整的验证规则与自定义消息

先把你的代码补全,确保每个验证规则都对应上自定义的语言包消息:

use Illuminate\Support\Facades\Lang;
use Illuminate\Support\Facades\Validator;

// 验证规则定义
$rules = [
    'username' => 'required|max:255',
    'oldpassword' => 'required|max:255',
    'newpassword' => 'required|min:6|max:255|alpha_num',
    'newpasswordagain' => 'required|same:newpassword',
];

// 补全所有规则对应的自定义错误消息
$messages = [
    'username.required' => Lang::get('userpasschange.usernamerequired'),
    'username.max' => Lang::get('userpasschange.usernamemax255'), // 不用写:255,Laravel会自动替换占位符
    'oldpassword.required' => Lang::get('userpasschange.oldpasswordrequired'),
    'oldpassword.max' => Lang::get('userpasschange.oldpasswordmax255'),
    'newpassword.required' => Lang::get('userpasschange.newpasswordrequired'),
    'newpassword.min' => Lang::get('userpasschange.newpasswordmin6'),
    'newpassword.max' => Lang::get('userpasschange.newpasswordmax255'),
    'newpassword.alpha_num' => Lang::get('userpasschange.newpasswordalphanum'),
    'newpasswordagain.required' => Lang::get('userpasschange.newpasswordagainrequired'),
    'newpasswordagain.same' => Lang::get('userpasschange.newpasswordagainsame'),
];

实际调用验证器处理表单

接下来把这些规则和消息用到实际的验证流程里,处理用户提交的表单数据:

// 提取表单提交的目标字段
$data = request()->only(['username', 'oldpassword', 'newpassword', 'newpasswordagain']);

// 创建验证实例
$validator = Validator::make($data, $rules, $messages);

// 检查验证是否失败
if ($validator->fails()) {
    // 重定向回表单页,携带错误消息和用户之前输入的内容
    return redirect()->back()
        ->withErrors($validator)
        ->withInput();
}

// 验证通过,执行密码修改逻辑
// 这里可以写你更新用户密码的代码,比如:
// $user = auth()->user();
// $user->password = Hash::make($data['newpassword']);
// $user->save();

几个实用小提示

  • 语言文件配置:确保你的语言文件放在resources/lang/[语言代码]/userpasschange.php(比如resources/lang/zh-CN/userpasschange.php),内容示例:
return [
    'usernamerequired' => '用户名不能为空',
    'usernamemax255' => '用户名不能超过255个字符',
    'oldpasswordrequired' => '旧密码不能为空',
    'oldpasswordmax255' => '旧密码不能超过255个字符',
    'newpasswordrequired' => '新密码不能为空',
    'newpasswordmin6' => '新密码至少需要:min个字符', // 用:min自动替换规则参数
    'newpasswordmax255' => '新密码不能超过255个字符',
    'newpasswordalphanum' => '新密码只能包含字母和数字',
    'newpasswordagainrequired' => '请再次输入新密码',
    'newpasswordagainsame' => '两次输入的新密码不一致',
];
  • 验证旧密码真实性:你当前的规则只检查了旧密码的必填和长度,建议加一个自定义规则验证旧密码是否和用户当前密码匹配:
// 在AppServiceProvider的boot方法里注册自定义规则
Validator::extend('correct_old_password', function ($attribute, $value, $parameters, $validator) {
    $user = auth()->user();
    return Hash::check($value, $user->password);
});

// 然后修改oldpassword的规则
'oldpassword' => 'required|max:255|correct_old_password',

// 对应新增错误消息
'oldpassword.correct_old_password' => Lang::get('userpasschange.oldpasswordincorrect'),

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:30:47