📜  laravel 自定义验证消息 - PHP (1)

📅  最后修改于: 2023-12-03 15:02:38.131000             🧑  作者: Mango

Laravel 自定义验证消息

在 Laravel 中,我们经常需要对请求参数进行验证,以保证数据的有效性。Laravel 提供了丰富的验证规则,但有时默认的错误提示信息并不符合我们的需求,这时就需要自定义验证消息了。

使用自定义验证消息
定义验证规则和消息

首先,在 app/Http/Requests 目录下创建一个根据需求命名的新的请求类,比如 ExampleRequest,然后在该类中定义需要验证的规则和消息,示例代码如下:

use Illuminate\Foundation\Http\FormRequest;

class ExampleRequest extends FormRequest
{
    public function rules()
    {
        return [
            'name' => 'required',
            'email' => 'required|email',
            'password' => 'required|min:6',
        ];
    }

    public function messages()
    {
        return [
            'name.required' => '姓名不能为空',
            'email.required' => '邮箱不能为空',
            'email.email' => '邮箱格式不正确',
            'password.required' => '密码不能为空',
            'password.min' => '密码至少6位',
        ];
    }
}

在上述代码中,rules() 方法定义了需要验证的规则,是一个关联数组,其中键名为验证字段名,键值为验证规则(可以是字符串或数组),比如 'name' => 'required' 表示验证 name 字段是否不能为空;'password' => 'required|min:6' 则表示验证 password 字段是否不能为空,且最少要求 6 位。

messages() 方法定义了自定义的验证消息,也是一个关联数组,其中键名为需要修改的验证规则名称前缀加上点号,比如 'name.required' 的前缀为 'name.',即表示需要修改 required 规则的提示信息,它的值为我们自定义的提示信息。

从上面的示例代码中可以看出,我们修改的验证规则有五个,分别为 name.requiredemail.requiredemail.emailpassword.requiredpassword.min。如果我们不定义自定义消息,对应的默认提示信息分别为 'The name field is required.''The email field is required.''The email field must be a valid email address.''The password field is required.''The password must be at least 6 characters.'

使用请求类进行验证

定义验证规则和消息后,就可以在控制器中使用请求类对请求参数进行验证了。在控制器中,我们使用 validate() 方法对请求进行验证,示例代码如下:

public function store(ExampleRequest $request)
{
    // 验证通过,执行相应业务逻辑
}

在代码中,我们将 ExampleRequest 类的实例作为 store() 方法的参数,Laravel 会自动对请求参数进行验证,如果验证失败,则会返回带有错误消息的响应;如果验证成功,则会执行相应的业务逻辑。

视图中展示错误消息

如果请求验证失败,我们需要在视图中展示错误消息。Laravel 的视图模板中可以通过 errors 变量获得错误消息。示例代码如下:

@if ($errors->any())
<div class="alert alert-danger">
    <ul>
        @foreach ($errors->all() as $error)
        <li>{{ $error }}</li>
        @endforeach
    </ul>
</div>
@endif

在代码中,$errors 是Laravel 的一个全局变量,用于获取请求验证失败时的错误消息。 $errors->any() 方法用于判断是否有任何错误消息;$errors->all() 方法可以获取所有的错误消息,它返回的是一个包含错误消息的数组,我们需要通过遍历该数组输出每一个错误消息。

自定义验证消息的优先级

在请求类中定义的验证消息具有最高优先级,如果没有在请求类中定义对应的验证消息,Laravel 将使用默认的验证消息。

此外,我们还可以通过语言文件来自定义全局的验证消息,默认情况下,Laravel 提供了英文和中文两种语言的验证消息文件,分别为 resources/lang/en/validation.phpresources/lang/zh-CN/validation.php。如果需要自定义全局的验证消息,可以直接修改这两个文件即可。

总结

本文介绍了如何在 Laravel 中自定义验证消息。我们的步骤分为三个:定义验证规则和消息、在请求类中使用请求类进行验证、在视图中展示错误消息。对于 Laravel 开发者来说,自定义验证消息是一个常用且实用的技巧,可以在保证数据有效性的同时提高用户体验。