Skip to content

Laravel 表单验证 使用技巧

「这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战

表单验证

怎么设置动态的验证规则?

如果我们的限制规则是动态依赖于其他条件的,那么我们可以动态地创建规则数组

php
public
function save(Request $request)     {         $validationArray = [             'title' => 'required',             'name' => 'required',             'logo' => 'file|max:1024',             'position' => 'required',         ];
if (!Auth::check()) {             $validationArray = array_merge($validationArray, [                 'email' => 'required|email|unique:users',                 'password' => 'required|confirmed|min:5',                 'name' => 'required'             ]);
}         //
}

自定义抛出422状态码

如果我们不使用 validate () 或 Form Request,但仍然需要使用相同的 422 状态码和错误结构抛出错误,那么可以手动抛出 throw ValidationException::withMessages()

这个功能真的是用不到的时候没感觉,用到的时候觉得真优雅~

php
if (! $user || ! Hash::check($request->password, $user->password)) {     throw ValidationException::withMessages([         'email' => ['邮箱格式不正确'],     ]);
}

图片验证

我们在验证上传的图片时,可以指定所需的尺寸

css
['image' => 'dimensions:max_width=1096,max_height=1096']

自定义验证错误的信息

我们只需在 resources/lang/xx/validation.php 文件创建适当的数组结构,就可以定义每个 字段、规则和语言的验证错误消息。

dart
'custom' => [      'email' => [         'required' => '电子邮箱必填',      ], ],

某些条件的验证规则

如果验证规则依赖于某些条件,则可以通过将 withValidator() 添加到 FormRequest 类中来修改规则,并在那里指定自定义逻辑。

例如,如果我们只想为某些用户角色添加验证规则。

scala
use Illuminate\Validation\Validator; class XxxxxRequest extends FormRequest {     public function withValidator(Validator $validator) {         if (auth()->user()->is_admin) {             $validator->addRules(['xxxx' => 'required']);         }     }      }

更改默认验证消息

如果要更改特定字段和特定验证规则的默认验证错误消息,只需将 messages() 方法添加到 FormRequest 类中。

php
class UserRequest extends FormRequest {     public
function rules()     {
return ['name' => 'required'];
}       public
function messages()     {
return ['name.required' => '请填写姓名'];
}
}

预验证

我们想在默认的 Laravel 验证之前修改某个字段,(类似常用的beforeXxx(){}、afterXxx(){})

FormRequest 类中有一个方法 prepareForValidation () , 能实现我们的需求:

在验证之前修改字段

php
protected
function prepareForValidation() {     $this->merge([         'myBlog' => Illuminate\Support\Str::slug($this->myBlog),     ]);
}

第一次验证错误时就终止程序

默认情况下,将在列表中返回 Laravel 验证错误,检查所有验证规则。

但是如果我们想要在第一个错误之后终止这个过程,使用验证规则叫做 bail:

dart
$request->validate([     'title' => 'bail|required|unique:posts|max:255',     'body' => 'required', ]);

Last but not least

技术交流群请到 这里来。 或者添加我的微信 wangzhongyang0601 ,一起学习一起进步。

感谢大家的点赞、评论、关注;谢谢大佬们的支持,感谢 ღ( ´・ᴗ・` )比心

AI 应用开发训练营 · 现在开始

别只收藏 AI 文章,今天就做出第一个能上线的项目

文章解决认知,项目才证明能力。把 Agent、RAG、MCP 变成可运行、可展示、可面试表达的成果,现在就从一次岗位准备度自测开始。

立即开始 AI 岗位准备度自测 查看训练营路线
真实学员成果先看成果,再决定是否开始 →
  1. 01选方向
  2. 02做项目
  3. 03出成果
  4. 04拿面试