Laravel自定义字段名验证:重定向错误提示字段名优化问题
如何在Laravel验证中自定义字段友好名称?
我现在正在保存经过验证的数据,验证规则定义在$rules数组中:
$rules = array( 'name_field' => 'required|unique:users', 'number_in_db' => 'required', ); $validator = Validator::make($request->all(), $rules); if ($validator->passes()) { MyModel::create($request->input()); return redirect()->route('some.route')->withFlashSuccess('Done!'); } else { return redirect()->back()->withInput()->withErrors($validator); }
代码运行正常,但验证失败重定向返回时,错误提示显示的是代码中的原始字段标识(比如name_field),而非自定义的友好字段名称,请问该怎么配置才能让错误提示显示自定义的字段名?
几种可行的解决方案:
方法1:创建验证器时直接传入属性映射
这是最直接的方式,在调用Validator::make()的时候,用第四个参数传入字段名和友好名称的映射数组:
$rules = array( 'name_field' => 'required|unique:users', 'number_in_db' => 'required', ); // 自定义字段友好名称 $customAttributes = [ 'name_field' => '用户名', 'number_in_db' => '数据库编号', ]; // 第四个参数传入属性映射 $validator = Validator::make($request->all(), $rules, [], $customAttributes);
这样验证失败时,错误消息里就会自动替换成你定义的友好名称,不用改其他配置。
方法2:全局语言文件配置
如果希望整个应用里的所有验证都统一使用这些友好名称,推荐修改语言配置文件。找到resources/lang/zh-CN/validation.php(如果是中文环境,其他语言对应修改目录),在attributes数组里添加字段映射:
// resources/lang/zh-CN/validation.php return [ // ... 其他默认配置 'attributes' => [ 'name_field' => '用户名', 'number_in_db' => '数据库编号', // 可以继续添加其他字段的映射 ], ];
这种方式一劳永逸,所有用到这些字段的验证都会自动使用友好名称,适合全局统一规范的场景。
方法3:表单请求类中定义属性(适合结构化验证)
如果你用的是Laravel的表单请求类(比如通过php artisan make:request StoreUserRequest生成的请求类),可以在类里重写attributes()方法来定义友好名称:
class StoreUserRequest extends FormRequest { // 验证权限 public function authorize() { return true; } // 验证规则 public function rules() { return [ 'name_field' => 'required|unique:users', 'number_in_db' => 'required', ]; } // 自定义字段友好名称 public function attributes() { return [ 'name_field' => '用户名', 'number_in_db' => '数据库编号', ]; } }
这种方式把验证规则、权限和字段名称都封装在请求类里,代码结构更清晰,适合复杂的表单验证场景。
内容的提问来源于stack exchange,提问作者pmiranda
相关产品推荐
相关产品推荐

