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
相关产品推荐
相关产品推荐

