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

Laravel 如何向用户展示友好的表单验证错误提示信息

Laravel自定义表单验证友好错误提示方案

下面是3种常用的实现方案,可根据业务场景选择:


方法1:验证时直接传入自定义提示

在Validator::make方法的第三个参数传入对应规则的提示文案,适合单接口临时自定义提示的场景:

public function handleRegister(Request $request)
{
    $validator = Validator::make($request->all(), [
        'name' => 'required|string|max:100|min:3',
        'email' => 'required|email',
        'phone' => 'required|regex:/^01[0125][0-9]{8}$/',
        'password' => 'required|string|max:100|min:8'
    ], [
        'name.required' => '用户名不能为空',
        'name.min' => '用户名长度不能少于3个字符',
        'name.max' => '用户名长度不能超过100个字符',
        'email.required' => '电子邮箱不能为空',
        'email.email' => '请输入有效的电子邮箱格式',
        'phone.required' => '手机号不能为空',
        'phone.regex' => '请输入有效的11位埃及手机号',
        'password.required' => '密码不能为空',
        'password.min' => '密码长度不能少于8个字符',
        'password.max' => '密码长度不能超过100个字符',
    ]);

    if ($validator->fails()) {
        return redirect()->back()
            ->with('errorForm', $validator->errors()->getMessages())
            ->withInput();
    }

    // 后续原有业务逻辑保持不变
    try {
        User::create(['name' => $request->name, 'email' => $request->email, 'phone' => $request->phone, 'password' => Hash::make($request->password)]);

        return redirect()->back()
            ->with('success', '创建成功!');
    } catch (\Exception $e) {
        return redirect()->back()
            ->with('error', '创建过程中出现错误!');
    }

    return redirect(route('home'));
}

方法2:全局修改验证提示语言包

适合全项目统一使用中文提示的场景,修改后所有验证逻辑都会自动生效,不需要单独配置:

  1. 新建resources/lang/zh_CN/validation.php语言文件(如果没有中文语言包可自行创建)
  2. 在文件的attributes数组中添加字段和中文名称的映射:
'attributes' => [
    'name' => '用户名',
    'email' => '电子邮箱',
    'phone' => '手机号',
    'password' => '密码',
],

配置完成后默认错误提示会自动替换字段名为中文,比如原本的name is required会自动变成用户名不能为空。


方法3:创建表单请求类统一处理

适合验证规则复用度高的场景,把验证逻辑和业务逻辑拆分,代码更规范:

  1. 运行命令生成请求类:php artisan make:request RegisterRequest
  2. 编辑app/Http/Requests/RegisterRequest.php文件:
// 权限验证,所有人都可以提交注册请求
public function authorize()
{
    return true;
}

// 定义验证规则
public function rules()
{
    return [
        'name' => 'required|string|max:100|min:3',
        'email' => 'required|email',
        'phone' => 'required|regex:/^01[0125][0-9]{8}$/',
        'password' => 'required|string|max:100|min:8'
    ];
}

// 定义自定义提示文案
public function messages()
{
    return [
        'name.required' => '用户名不能为空',
        'name.min' => '用户名长度不能少于3个字符',
        // 其他规则提示和方法1配置一致即可
    ];
}
  1. 控制器直接注入请求类,不需要手动写验证逻辑,验证不通过会自动跳转回上一页携带错误信息和旧输入:
public function handleRegister(RegisterRequest $request)
{
    try {
        User::create(['name' => $request->name, 'email' => $request->email, 'phone' => $request->phone, 'password' => Hash::make($request->password)]);

        return redirect()->back()
            ->with('success', '创建成功!');
    } catch (\Exception $e) {
        return redirect()->back()
            ->with('error', '创建过程中出现错误!');
    }

    return redirect(route('home'));
}

前端Blade模板错误展示示例

{{-- 统一展示所有错误 --}}
@if(session('errorForm'))
    <div class="alert alert-danger">
        <ul>
            @foreach(session('errorForm') as $fieldErrors)
                @foreach($fieldErrors as $error)
                    <li>{{ $error }}</li>
                @endforeach
            @endforeach
        </ul>
    </div>
@endif

{{-- 单独展示对应字段的第一个错误 --}}
@if(session('errorForm.name'))
    <div class="text-danger">{{ session('errorForm.name')[0] }}</div>
@endif

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:57:04