简介

定义验证规矩来验证传入的 HTTP 请求。

创建表单验证器

使用 artisan 的 make:request 来创建表单验证类,建议验证类名称与实际的表单名对应

  1. php artisan make:request StoreBlogPost

新生成的类保存在 app/Http/Requests 目录下

开启表单验证器

打开表单的验证权限

  1. //判断用户是否有权限进行此请求。
  2. public function authorize()
  3. {
  4. return true;
  5. }

编写表单验证规矩

  1. public function rules()
  2. {
  3. return [
  4. 'title' => 'required|unique:posts|max:255',
  5. 'body' => 'required',
  6. ];
  7. }

自定义验证属性名称

将验证的数据名称自定义

  1. public function attributes()
  2. {
  3. return [
  4. 'password2' => '确认密码',
  5. ];
  6. }

自定义错误消息

通过重写表单请求的 messages 方法来自定义错误消息。此方法应返回属性 / 规则对及其对应错误消息的数组:

文件在 app/Http/Requests 目录下

  1. //获取已定义验证规则的错误消息。
  2. public function messages(){
  3. return [
  4. 'title.规则' => '自定义提示内容',
  5. 'body.required' => 'A message is required',
  6. ];
  7. }

在控制器中使用

通过依赖注入实现使用验证器。不需要在控制器中写任何验证逻辑:

  1. //引入
  2. use App\Http\Requests\StoreBlogPost;
  3. //在控制器中使用
  4. public function store(StoreBlogPost $request)
  5. {
  6. // 获取通过验证的数据...
  7. $validated = $request->validated();
  8. }

常用验证规则

忽略指定 ID

在进行字段唯一性验证时忽略指定 ID ,常用于「更新个人资料」页面会包含用户名,邮箱等,如果仅更新邮箱不更新用户名时,不抛出异常。

  1. use Illuminate\Validation\Rule;
  2. Validator::make($data, [
  3. 'email' => [
  4. 'required',
  5. Rule::unique('users')->ignore($user->id),
  6. ],
  7. ]);